Skip to content

Commit

Permalink
Adding serializers for java time package and finishing tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
urosjarc committed Mar 24, 2024
1 parent f8130fc commit 0807534
Show file tree
Hide file tree
Showing 9 changed files with 149 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.urosjarc.dbmessiah.extra.kotlinx

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
import java.time.Instant

public object InstantSerializer : KSerializer<Instant> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("java.time.Instant", PrimitiveKind.STRING)

override fun deserialize(decoder: Decoder): Instant {
return Instant.parse(decoder.decodeString())
}

override fun serialize(encoder: Encoder, value: Instant) {
encoder.encodeString(value.toString())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.urosjarc.dbmessiah.extra.kotlinx

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
import java.time.LocalDate

public object LocalDateSerializer : KSerializer<LocalDate> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("java.time.LocalDate", PrimitiveKind.STRING)

override fun deserialize(decoder: Decoder): LocalDate {
return LocalDate.parse(decoder.decodeString())
}

override fun serialize(encoder: Encoder, value: LocalDate) {
encoder.encodeString(value.toString())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.urosjarc.dbmessiah.extra.kotlinx

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
import java.time.LocalTime

public object LocalTimeSerializer : KSerializer<LocalTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("java.time.LocalTime", PrimitiveKind.STRING)

override fun deserialize(decoder: Decoder): LocalTime {
return LocalTime.parse(decoder.decodeString())
}

override fun serialize(encoder: Encoder, value: LocalTime) {
encoder.encodeString(value.toString())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import kotlinx.serialization.encoding.Encoder
import java.util.*

public object UUIDSerializer : KSerializer<UUID> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("java.util.UUID", PrimitiveKind.STRING)

override fun deserialize(decoder: Decoder): UUID {
return UUID.fromString(decoder.decodeString())
Expand Down
21 changes: 21 additions & 0 deletions src/test/kotlin/Test_InstantSerializer.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import org.junit.jupiter.api.Test
import utils.json
import java.time.Instant
import kotlin.test.assertEquals

class Test_InstantSerializer {
@Test
fun `test serialization`() {
val instant = Instant.now()

/** Encoding */
val instantJson = json.encodeToString(instant)
assertEquals("\"$instant\"", instantJson)

/** Decoding */
val instant_new = json.decodeFromString<Instant>(instantJson)
assertEquals(instant, instant_new)
}
}
21 changes: 21 additions & 0 deletions src/test/kotlin/Test_LocalDateSerializer.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import org.junit.jupiter.api.Test
import utils.json
import java.time.LocalDate
import kotlin.test.assertEquals

class Test_LocalDateSerializer {
@Test
fun `test serialization`() {
val instant = LocalDate.now()

/** Encoding */
val instantJson = json.encodeToString(instant)
assertEquals("\"$instant\"", instantJson)

/** Decoding */
val instant_new = json.decodeFromString<LocalDate>(instantJson)
assertEquals(instant, instant_new)
}
}
21 changes: 21 additions & 0 deletions src/test/kotlin/Test_LocalTimeSerializer.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import org.junit.jupiter.api.Test
import utils.json
import java.time.LocalTime
import kotlin.test.assertEquals

class Test_LocalTimeSerializer {
@Test
fun `test serialization`() {
val instant = LocalTime.now()

/** Encoding */
val instantJson = json.encodeToString(instant)
assertEquals("\"$instant\"", instantJson)

/** Decoding */
val instant_new = json.decodeFromString<LocalTime>(instantJson)
assertEquals(instant, instant_new)
}
}
12 changes: 6 additions & 6 deletions src/test/kotlin/Test_UUIDSerializer.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.junit.jupiter.api.Test
import utils.UId
import utils.Parent
import utils.UId
import utils.json
import kotlin.test.assertEquals

class test_UUIDSerializer {
Expand All @@ -12,11 +12,11 @@ class test_UUIDSerializer {
val id = UId<Parent>()

/** Encoding */
val id_json = Json.encodeToString(id)
val id_json = json.encodeToString(id)
assertEquals("\"${id.value}\"", id_json)

/** Decoding */
val id_new = Json.decodeFromString<UId<Parent>>(id_json)
val id_new = json.decodeFromString<UId<Parent>>(id_json)
assertEquals(id, id_new)
}

Expand All @@ -25,11 +25,11 @@ class test_UUIDSerializer {
val parent = Parent(col = "col")

/** Encoding */
val parent_json = Json.encodeToString(parent)
val parent_json = json.encodeToString(parent)
assertEquals("{\"id\":\"${parent.id}\",\"col\":\"col\"}", parent_json)

/** Decoding */
val parent_new = Json.decodeFromString<Parent>(parent_json)
val parent_new = json.decodeFromString<Parent>(parent_json)
assertEquals(parent, parent_new)
}
}
16 changes: 16 additions & 0 deletions src/test/kotlin/utils/Serializers.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,23 @@
package utils

import com.urosjarc.dbmessiah.data.TypeSerializer
import com.urosjarc.dbmessiah.extra.kotlinx.InstantSerializer
import com.urosjarc.dbmessiah.extra.kotlinx.LocalDateSerializer
import com.urosjarc.dbmessiah.extra.kotlinx.LocalTimeSerializer
import com.urosjarc.dbmessiah.extra.kotlinx.UUIDSerializer
import com.urosjarc.dbmessiah.serializers.IdTS
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual

val json = Json {
serializersModule = SerializersModule {
contextual(InstantSerializer)
contextual(LocalDateSerializer)
contextual(LocalTimeSerializer)
contextual(UUIDSerializer)
}
}

internal object Serializers {
val int = IdTS.int({ Id<Any>(it) }, { it.value })
Expand Down

0 comments on commit 0807534

Please sign in to comment.