
main.com.jakewharton.retrofit2.converter.kotlinx.serialization.Serializer.kt Maven / Gradle / Ivy
package com.jakewharton.retrofit2.converter.kotlinx.serialization
import java.lang.reflect.Type
import kotlinx.serialization.BinaryFormat
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialFormat
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.StringFormat
import kotlinx.serialization.serializer
import okhttp3.MediaType
import okhttp3.RequestBody
import okhttp3.ResponseBody
internal sealed class Serializer {
abstract fun fromResponseBody(loader: DeserializationStrategy, body: ResponseBody): T
abstract fun toRequestBody(contentType: MediaType, saver: SerializationStrategy, value: T): RequestBody
protected abstract val format: SerialFormat
fun serializer(type: Type): KSerializer = format.serializersModule.serializer(type)
class FromString(override val format: StringFormat) : Serializer() {
override fun fromResponseBody(loader: DeserializationStrategy, body: ResponseBody): T {
val string = body.string()
return format.decodeFromString(loader, string)
}
override fun toRequestBody(contentType: MediaType, saver: SerializationStrategy, value: T): RequestBody {
val string = format.encodeToString(saver, value)
return RequestBody.create(contentType, string)
}
}
class FromBytes(override val format: BinaryFormat) : Serializer() {
override fun fromResponseBody(loader: DeserializationStrategy, body: ResponseBody): T {
val bytes = body.bytes()
return format.decodeFromByteArray(loader, bytes)
}
override fun toRequestBody(contentType: MediaType, saver: SerializationStrategy, value: T): RequestBody {
val bytes = format.encodeToByteArray(saver, value)
return RequestBody.create(contentType, bytes)
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy