Sumeet Parmar
11/20/2023, 10:58 PMdata class NetworkResponse<T> (val data: T)
where the response has no data field and all the json key/value deserialize into provided class?ephemient
11/20/2023, 11:13 PMT
and then wrap in NetworkResponse
if you needSumeet Parmar
11/20/2023, 11:15 PM@Serializable
private data class NetworkResponse<T>(
@SerialName("$")
val data: T,
)
$
obviously doesn’t work …ephemient
11/20/2023, 11:17 PMjson.decodeFromString<NetworkResponse<Foo>>(...)
instead do
NetworkResponse(json.decodeFromString<Foo>(...))
@Serializable(with = NetworkResponseSerializer::class)
class NetworkResponse<T>(val data: T)
class NetworkResponseSerializer<T>(private val tSerializer: KSerializer<T>) : KSerializer<NetworkResponse<T>> {
override val descriptor: SerialDescriptor =
SerialDescriptor("NetworkResponse<${tSerializer.descriptor.serialName}>", tSerializer.descriptor)
override fun deserialize(decoder: Decoder): NetworkResponse<T> =
NetworkResponse(decoder.decodeSerializableValue(tSerializer))
override fun serialize(encoder: Encoder, value: NetworkResponse<T>) {
encoder.encodeSerializableValue(tSerializer, value.data)
}
}
but there's not many real advantages over thatSumeet Parmar
11/20/2023, 11:19 PMretrofit
and was wondering if I can just rewrite the response into a map with data
field …