y
04/14/2024, 1:04 PMPair
? if not, what's the least boilerplatey way to support this?ephemient
04/14/2024, 6:36 PMclass PairAsListSerializer<A, B>(
private val aSerializer: KSerializer<A>,
private val bSerializer: KSerializer<B>,
) : KSerializer<Pair<A, B>> {
override val descriptor = SerialDescriptor(
"PairAsList<${aSerializer.descriptor.serialName}, ${bSerializer.descriptor.serialName}>",
serialDescriptor<JsonArray>()
)
override fun serialize(encoder: Encoder, value: Pair<A, B>) {
(encoder as JsonEncoder).encodeJsonElement(
buildJsonArray {
add(encoder.json.encodeToJsonElement(aSerializer, value.first))
add(encoder.json.encodeToJsonElement(bSerializer, value.second))
}
)
}
override fun deserialize(decoder: Decoder): Pair<A, B> {
val pair = (decoder as JsonDecoder).decodeJsonElement().jsonArray
return decoder.json.decodeFromJsonElement(aSerializer, pair[0]) to
decoder.json.decodeFromJsonElement(bSerializer, pair[1])
}
}
Adam S
04/15/2024, 11:51 AM