All Downloads are FREE. Search and download functionalities are using the official Maven repository.

main.retrofit2.converter.kotlinx.serialization.Serializer.kt Maven / Gradle / Ivy

There is a newer version: 3.0.0
Show newest version
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