Rescribet
08/02/2021, 7:55 AMio.ktor.http.URL
isn’t @Serializable
?
Seems like a good way to avoid and a quick win to get basic validation:
@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
08/02/2021, 7:57 AMDominaezzz
08/02/2021, 7:57 AMkotlinx.serialization
.Rescribet
08/02/2021, 7:57 AMDominaezzz
08/02/2021, 8:05 AM@Serializable
data class Person(
val name: String,
val friends: @Serializable(MyCustomSerializer::class) Url,
)
Rescribet
08/02/2021, 8:07 AMobject 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())
}