56 lines
1.7 KiB
Kotlin
56 lines
1.7 KiB
Kotlin
package eventDemo.plugins
|
|
|
|
import eventDemo.app.GameId
|
|
import io.ktor.serialization.kotlinx.json.json
|
|
import io.ktor.server.application.Application
|
|
import io.ktor.server.application.install
|
|
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
|
|
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 kotlinx.serialization.json.Json
|
|
import kotlinx.serialization.modules.SerializersModule
|
|
import java.util.UUID
|
|
|
|
fun Application.configureSerialization() {
|
|
install(ContentNegotiation) {
|
|
json(
|
|
Json {
|
|
serializersModule =
|
|
SerializersModule {
|
|
contextual(UUID::class) { UUIDSerializer }
|
|
}
|
|
},
|
|
)
|
|
}
|
|
}
|
|
|
|
object GameIdSerializer : KSerializer<GameId> {
|
|
override fun deserialize(decoder: Decoder): GameId = GameId(UUID.fromString(decoder.decodeString()))
|
|
|
|
override fun serialize(
|
|
encoder: Encoder,
|
|
value: GameId,
|
|
) {
|
|
encoder.encodeString(value.id.toString())
|
|
}
|
|
|
|
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("GameId", PrimitiveKind.STRING)
|
|
}
|
|
|
|
object UUIDSerializer : KSerializer<UUID> {
|
|
override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString())
|
|
|
|
override fun serialize(
|
|
encoder: Encoder,
|
|
value: UUID,
|
|
) {
|
|
encoder.encodeString(value.toString())
|
|
}
|
|
|
|
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
|
|
}
|