Module kotlinx-serialization-csv

Serialize and deserialize ordered CSV and Fixed Length Format Files with kotlinx-serialization.

Install

This package is uploaded to MavenCentral and supports JVM, JS(IR) and all native targets as well.

repositories {
    mavenCentral()
}

dependencies {
    implementation("app.softwork:kotlinx-serialization-csv:LATEST")
    implementation("app.softwork:kotlinx-serialization-flf:LATEST")
}

License

Apache 2

Package app.softwork.serialization.csv

This package contains the CSV-Format.

Usage

FirstName,LastName
John,Doe

To decode from the given CSV string:

@Serializable
data class Names(val firstName: String, val lastName: String)

CSVFormat.decodeFromString(Names.serializer(), csv)

And to encode:

CSVFormat.encodeToString(Names.serializer(), Names("John", "Doe"))

"""
firstName,lastName
John,Doe
"""

Limitations

  • The order of the properties of the class must match the order of the header/fields!
  • The header is ignored.
  • Inner lists are not supported, eg. data class NotSupported(val innerList: List<String>)

Package app.softwork.serialization.flf

This package contains the Fixed LengthFile Format.

Usage

John Doe  

To decode from the given Fixed-Length string you need to apply @FixedLength(length = n):

@Serializable
data class Names(
    @FixedLength(5) val firstName: String,
    @FixedLength(5) val lastName: String
)

FixedLengthFormat.decodeFromString(Names.serializer(), flf)

And to encode:

FixedLengthFormat.encodeToString(Names.serializer(), Names("John", "Doe"))

"""
John Doe  
"""

Limitations

  • The order of the properties of the class must match the order of the fields!
  • All whitespaces are trimmed.
  • Because this format does not have any delimiters, there is no check, if a given length is too long and consumes the next value.
  • Because this format does not have any delimiters, it is not possible to decode/encode primitives. You must use a class with @FixedLength annotated properties.
  • Inner lists are not supported, eg. data class NotSupported(val innerList: List<String>)

GitHub

View Github