1 // This file was automatically generated from serializers.md by Knit tool. Do not edit. 2 package example.exampleSerializer18 3 4 import kotlinx.serialization.* 5 import kotlinx.serialization.json.* 6 import kotlinx.serialization.encoding.* 7 import kotlinx.serialization.descriptors.* 8 9 import java.util.Date 10 import java.util.TimeZone 11 import java.text.SimpleDateFormat 12 13 object DateAsLongSerializer : KSerializer<Date> { 14 override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("DateAsLong", PrimitiveKind.LONG) serializenull15 override fun serialize(encoder: Encoder, value: Date) = encoder.encodeLong(value.time) 16 override fun deserialize(decoder: Decoder): Date = Date(decoder.decodeLong()) 17 } 18 19 object DateAsSimpleTextSerializer: KSerializer<Date> { 20 override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("DateAsSimpleText", PrimitiveKind.LONG) 21 private val format = SimpleDateFormat("yyyy-MM-dd").apply { 22 // Here we explicitly set time zone to UTC so output for this sample remains locale-independent. 23 // Depending on your needs, you may have to adjust or remove this line. 24 setTimeZone(TimeZone.getTimeZone("UTC")) 25 } 26 override fun serialize(encoder: Encoder, value: Date) = encoder.encodeString(format.format(value)) 27 override fun deserialize(decoder: Decoder): Date = format.parse(decoder.decodeString()) 28 } 29 30 typealias DateAsLong = @Serializable(DateAsLongSerializer::class) Date 31 32 typealias DateAsText = @Serializable(DateAsSimpleTextSerializer::class) Date 33 34 @Serializable 35 class ProgrammingLanguage(val stableReleaseDate: DateAsText, val lastReleaseTimestamp: DateAsLong) 36 mainnull37fun main() { 38 val format = SimpleDateFormat("yyyy-MM-ddX") 39 val data = ProgrammingLanguage(format.parse("2016-02-15+00"), format.parse("2022-07-07+00")) 40 println(Json.encodeToString(data)) 41 } 42