diff --git a/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt b/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt index 5c91581c..0b41821a 100644 --- a/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt +++ b/model/src/main/kotlin/dev/msfjarvis/claw/model/Comment.kt @@ -1,5 +1,7 @@ package dev.msfjarvis.claw.model +import dev.msfjarvis.claw.serialization.JavaInstantSerializer +import java.time.temporal.TemporalAccessor import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -7,6 +9,13 @@ import kotlinx.serialization.Serializable class Comment( val comment: String, val url: String, + val score: Int, + @Serializable(with = JavaInstantSerializer::class) + @SerialName("created_at") + val createdAt: TemporalAccessor, + @Serializable(with = JavaInstantSerializer::class) + @SerialName("updated_at") + val updatedAt: TemporalAccessor, @SerialName("indent_level") val indentLevel: Int, @SerialName("commenting_user") val user: User, ) diff --git a/model/src/main/kotlin/dev/msfjarvis/claw/serialization/JavaInstantSerializer.kt b/model/src/main/kotlin/dev/msfjarvis/claw/serialization/JavaInstantSerializer.kt new file mode 100644 index 00000000..af326ab7 --- /dev/null +++ b/model/src/main/kotlin/dev/msfjarvis/claw/serialization/JavaInstantSerializer.kt @@ -0,0 +1,22 @@ +package dev.msfjarvis.claw.serialization + +import java.time.format.DateTimeFormatter +import java.time.temporal.TemporalAccessor +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +class JavaInstantSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("Instant", PrimitiveKind.STRING) + + override fun deserialize(decoder: Decoder): TemporalAccessor { + return DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(decoder.decodeString()) + } + + override fun serialize(encoder: Encoder, value: TemporalAccessor) = + encoder.encodeString(value.toString()) +}