Rescribet
io.ktor.http.URL
@Serializable
primitive obsession▾
@Serializable data class Person( val name: String, val friends: String, ) val p = Person("Abbey", "<http://ex.com/abbey/friends>") Json.encodeToString(p) // { "name": "Abbey", "friends": "<http://ex.com/abbey/friends>" } val err = """ { "name": "Abbey", "friends": "abbey/friends" } """ Json.decodeFromString<Person>(err) // MalformedUrlException : SerializationException
Dominaezzz
kotlinx.serialization
@Serializable data class Person( val name: String, val friends: @Serializable(MyCustomSerializer::class) Url, )
object UrlSerializer : KSerializer<Url> { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Url", PrimitiveKind.STRING) override fun serialize(encoder: Encoder, value: Url) = encoder.encodeString(value.toString()) override fun deserialize(decoder: Decoder): Url = Url(decoder.decodeString()) }
A modern programming language that makes developers happier.