magnumrocha
03/16/2020, 10:02 AM@file:UseSerializers(GMTDateSerializer::class)
@Serializable
data class Entry(
@SerialName("value") val value: Double,
@SerialName("date") val date: GMTDate,
@SerialName("comment") val comment: String?
)
@Serializer(forClass = GMTDate::class)
object GMTDateSerializer : KSerializer<GMTDate> {
override val descriptor: SerialDescriptor =
PrimitiveDescriptor("io.ktor.util.date.GMTDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: GMTDate) {
val year = "${value.year}-${value.month.value}-${value.dayOfMonth}" // yyyy-MMM-dd
val time = "${value.hours}-${value.minutes}-${value.seconds}" // hh-mm-dd
encoder.encodeString("${year}T${time}") // yyyy-MMM-ddThh-mm-dd
}
override fun deserialize(decoder: Decoder): GMTDate {
val gmtDateString = decoder.decodeString()
val (date, time) = gmtDateString.split("T").map { it.split("-") }
return GMTDate(
year = date[0].toInt(), month = Month.Companion.from(date[1]), dayOfMonth = date[2].toInt(),
hours = time[0].toInt(), minutes = time[1].toInt(), seconds = time[2].toInt()
)
}
}