```@file:UseSerializers(GMTDateSerializer::class) ...
# multiplatform
m
Copy code
@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()
        )
    }
}