
main.retrofit2.converter.kotlinx.serialization.Serializer.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of converter-kotlinx-serialization Show documentation
Show all versions of converter-kotlinx-serialization Show documentation
A Retrofit Converter which uses kotlinx.serialization for serialization.
package 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