
.serialization_csv.1.5.4.source-code.Csv.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of serialization_csv Show documentation
Show all versions of serialization_csv Show documentation
Hexagon CSV serialization format.
The newest version!
package com.hexagonkt.serialization.csv
import com.fasterxml.jackson.core.JsonProcessingException
import com.fasterxml.jackson.databind.ObjectReader
import com.fasterxml.jackson.dataformat.csv.CsvGenerator
import com.fasterxml.jackson.dataformat.csv.CsvMapper
import com.fasterxml.jackson.dataformat.csv.CsvParser
import com.hexagonkt.serialization.json.JacksonHelper
import com.hexagonkt.serialization.json.JacksonHelper.setupObjectMapper
import com.hexagonkt.serialization.SerializationFormat
import java.io.InputStream
import java.io.OutputStream
import kotlin.reflect.KClass
object Csv : SerializationFormat {
override val contentType: String = "text/csv"
override val extensions: Set = setOf("csv")
override val isBinary: Boolean = false
private val mapper: CsvMapper = setupObjectMapper(
CsvMapper()
.configure(CsvGenerator.Feature.ALWAYS_QUOTE_EMPTY_STRINGS, false)
.configure(CsvParser.Feature.ALLOW_TRAILING_COMMA, false)
.configure(CsvParser.Feature.SKIP_EMPTY_LINES, true)
) as CsvMapper
override fun serialize(obj: Any, output: OutputStream) {
val schema = when (obj) {
is Collection<*> -> mapper.schemaFor(obj.firstOrNull()?.javaClass ?: Any::class.java)
else -> mapper.schemaFor(obj.javaClass)
}
mapper.writer(schema).writeValue(output, obj)
}
override fun parse(input: InputStream, type: KClass): T =
try {
objectReader(type).readValue(input)
}
catch (e: JsonProcessingException) {
throw JacksonHelper.parseException(e)
}
override fun parseObjects(input: InputStream, type: KClass): List =
try {
objectReader(type).readValues(input).readAll()
}
catch (e: JsonProcessingException) {
throw JacksonHelper.parseException(e)
}
private fun objectReader(type: KClass): ObjectReader =
mapper.readerFor(type.java).with(mapper.schemaFor(type.java))
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy