Rafal
10/16/2024, 2:18 PMA single object needs to be sent as a JSON object
{
"some_string": "blah",
"some_long": 1234,
"my_object": {
"name": "Object 1",
"value": "Object 1 value"
}
}
or this:
Multiple objects need to be sent as a JSON array of those objects
{
"some_string": "blah",
"some_long": 1234,
"my_object": [
{
"name": "Object 1",
"value": "Object 1 value"
},
{
"name": "Object 2",
"value": "Object 2 value"
}
]
}
How can I achieve this? I don't want to duplicate the classes like SingleObjectPayload
and MultipleObjectsPayload
as there are many more params in it and I don't want to duplicate them.ephemient
10/16/2024, 2:44 PMRafal
10/16/2024, 2:46 PMRafal
10/16/2024, 2:46 PMefemoney
10/17/2024, 5:17 AM@Serializable
sealed interface Base
@Serializable
class Single(val name: String, val value: String) : Base
@Serializable(with = MultipleSerializer::class)
class Multiple(val list: List<Single>) : Base, List<Single> by list
object MultipleSerializer : KSerializer<Multiple> {
private val delegate = ListSerializer(Single.serializer())
override val descriptor = delegate.descriptor
override fun serialize(encoder: Encoder, value: Multiple) = delegate.serialize(encoder, value.list)
override fun deserialize(decoder: Decoder): Multiple = Multiple(delegate.deserialize(decoder))
}
Rafal
10/17/2024, 8:34 AM