[kotlin][client] add support for unknown default case with Kotlinx Serialization (#12930)

* [kotlin][client] Kotlinx Serialization cleanup

* [kotlin][client] Kotlinx Serialization cleanup

* [kotlin][client] add support for unknown default case with Kotlinx Serialization

* [kotlin][client] add support for unknown default case with Kotlinx Serialization

* [kotlin][client] add support for unknown default case with Kotlinx Serialization

* [kotlin][client] improve Kotlinx Serialization naming

* [kotlin][client] improve Kotlinx Serialization naming
This commit is contained in:
Bruno Coelho
2022-07-26 09:42:19 +01:00
committed by GitHub
parent bc98014146
commit 87dc75780a
62 changed files with 825 additions and 277 deletions

View File

@@ -26,7 +26,8 @@ import okhttp3.OkHttpClient
import org.openapitools.client.models.ModelApiResponse
import org.openapitools.client.models.Pet
import com.squareup.moshi.Json
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import org.openapitools.client.infrastructure.ApiClient
import org.openapitools.client.infrastructure.ApiResponse

View File

@@ -25,7 +25,8 @@ import okhttp3.OkHttpClient
import org.openapitools.client.models.Order
import com.squareup.moshi.Json
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import org.openapitools.client.infrastructure.ApiClient
import org.openapitools.client.infrastructure.ApiResponse

View File

@@ -25,7 +25,8 @@ import okhttp3.OkHttpClient
import org.openapitools.client.models.User
import com.squareup.moshi.Json
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import org.openapitools.client.infrastructure.ApiClient
import org.openapitools.client.infrastructure.ApiResponse

View File

@@ -28,7 +28,8 @@ import java.time.LocalTime
import java.time.OffsetDateTime
import java.time.OffsetTime
import java.util.Locale
import com.squareup.moshi.adapter
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClient) {
companion object {
@@ -105,7 +106,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
if (content == null) {
EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
Serializer.kotlinxSerializationJson.encodeToString(content)
.toRequestBody((mediaType ?: JsonMediaType).toMediaTypeOrNull())
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
@@ -113,7 +114,6 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")
}
@OptIn(ExperimentalStdlibApi::class)
protected inline fun <reified T: Any?> responseBody(body: ResponseBody?, mediaType: String? = JsonMediaType): T? {
if(body == null) {
return null
@@ -140,7 +140,7 @@ open class ApiClient(val baseUrl: String, val client: OkHttpClient = defaultClie
}
return when {
mediaType==null || (mediaType.startsWith("application/") && mediaType.endsWith("json")) ->
Serializer.moshi.adapter<T>().fromJson(bodyContent)
Serializer.kotlinxSerializationJson.decodeFromString<T>(bodyContent)
else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.")
}
}

View File

@@ -0,0 +1,21 @@
package org.openapitools.client.infrastructure
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.util.concurrent.atomic.AtomicBoolean
@Serializer(forClass = AtomicBoolean::class)
object AtomicBooleanAdapter : KSerializer<AtomicBoolean> {
override fun serialize(encoder: Encoder, value: AtomicBoolean) {
encoder.encodeBoolean(value.get())
}
override fun deserialize(decoder: Decoder): AtomicBoolean = AtomicBoolean(decoder.decodeBoolean())
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("AtomicBoolean", PrimitiveKind.BOOLEAN)
}

View File

@@ -0,0 +1,21 @@
package org.openapitools.client.infrastructure
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.util.concurrent.atomic.AtomicInteger
@Serializer(forClass = AtomicInteger::class)
object AtomicIntegerAdapter : KSerializer<AtomicInteger> {
override fun serialize(encoder: Encoder, value: AtomicInteger) {
encoder.encodeInt(value.get())
}
override fun deserialize(decoder: Decoder): AtomicInteger = AtomicInteger(decoder.decodeInt())
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("AtomicInteger", PrimitiveKind.INT)
}

View File

@@ -0,0 +1,21 @@
package org.openapitools.client.infrastructure
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.util.concurrent.atomic.AtomicLong
@Serializer(forClass = AtomicLong::class)
object AtomicLongAdapter : KSerializer<AtomicLong> {
override fun serialize(encoder: Encoder, value: AtomicLong) {
encoder.encodeLong(value.get())
}
override fun deserialize(decoder: Decoder): AtomicLong = AtomicLong(decoder.decodeLong())
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("AtomicLong", PrimitiveKind.LONG)
}

View File

@@ -1,17 +1,17 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.math.BigDecimal
class BigDecimalAdapter {
@ToJson
fun toJson(value: BigDecimal): String {
return value.toPlainString()
}
@FromJson
fun fromJson(value: String): BigDecimal {
return BigDecimal(value)
}
@Serializer(forClass = BigDecimal::class)
object BigDecimalAdapter : KSerializer<BigDecimal> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal(decoder.decodeString())
override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toPlainString())
}

View File

@@ -1,17 +1,22 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.math.BigInteger
class BigIntegerAdapter {
@ToJson
fun toJson(value: BigInteger): String {
return value.toString()
@Serializer(forClass = BigInteger::class)
object BigIntegerAdapter : KSerializer<BigInteger> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigInteger", PrimitiveKind.STRING)
override fun deserialize(decoder: Decoder): BigInteger {
return BigInteger(decoder.decodeString())
}
@FromJson
fun fromJson(value: String): BigInteger {
return BigInteger(value)
override fun serialize(encoder: Encoder, value: BigInteger) {
encoder.encodeString(value.toString())
}
}

View File

@@ -1,12 +0,0 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
class ByteArrayAdapter {
@ToJson
fun toJson(data: ByteArray): String = String(data)
@FromJson
fun fromJson(data: String): ByteArray = data.toByteArray()
}

View File

@@ -1,19 +1,24 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.time.LocalDate
import java.time.format.DateTimeFormatter
class LocalDateAdapter {
@ToJson
fun toJson(value: LocalDate): String {
return DateTimeFormatter.ISO_LOCAL_DATE.format(value)
@Serializer(forClass = LocalDate::class)
object LocalDateAdapter : KSerializer<LocalDate> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDate) {
encoder.encodeString(DateTimeFormatter.ISO_LOCAL_DATE.format(value))
}
@FromJson
fun fromJson(value: String): LocalDate {
return LocalDate.parse(value, DateTimeFormatter.ISO_LOCAL_DATE)
override fun deserialize(decoder: Decoder): LocalDate {
return LocalDate.parse(decoder.decodeString(), DateTimeFormatter.ISO_LOCAL_DATE)
}
}

View File

@@ -1,19 +1,24 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
class LocalDateTimeAdapter {
@ToJson
fun toJson(value: LocalDateTime): String {
return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(value)
@Serializer(forClass = LocalDateTime::class)
object LocalDateTimeAdapter : KSerializer<LocalDateTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDateTime) {
encoder.encodeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(value))
}
@FromJson
fun fromJson(value: String): LocalDateTime {
return LocalDateTime.parse(value, DateTimeFormatter.ISO_LOCAL_DATE_TIME)
override fun deserialize(decoder: Decoder): LocalDateTime {
return LocalDateTime.parse(decoder.decodeString(), DateTimeFormatter.ISO_LOCAL_DATE_TIME)
}
}

View File

@@ -1,19 +1,24 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.time.OffsetDateTime
import java.time.format.DateTimeFormatter
class OffsetDateTimeAdapter {
@ToJson
fun toJson(value: OffsetDateTime): String {
return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(value)
@Serializer(forClass = OffsetDateTime::class)
object OffsetDateTimeAdapter : KSerializer<OffsetDateTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("OffsetDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: OffsetDateTime) {
encoder.encodeString(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(value))
}
@FromJson
fun fromJson(value: String): OffsetDateTime {
return OffsetDateTime.parse(value, DateTimeFormatter.ISO_OFFSET_DATE_TIME)
override fun deserialize(decoder: Decoder): OffsetDateTime {
return OffsetDateTime.parse(decoder.decodeString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME)
}
}

View File

@@ -1,23 +1,52 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import java.math.BigDecimal
import java.math.BigInteger
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.util.UUID
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import java.net.URI
import java.net.URL
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicInteger
import java.util.concurrent.atomic.AtomicLong
object Serializer {
@Deprecated("Use Serializer.kotlinxSerializationAdapters instead", replaceWith = ReplaceWith("Serializer.kotlinxSerializationAdapters"))
@JvmStatic
val moshiBuilder: Moshi.Builder = Moshi.Builder()
.add(OffsetDateTimeAdapter())
.add(LocalDateTimeAdapter())
.add(LocalDateAdapter())
.add(UUIDAdapter())
.add(ByteArrayAdapter())
.add(URIAdapter())
.add(KotlinJsonAdapterFactory())
.add(BigDecimalAdapter())
.add(BigIntegerAdapter())
val kotlinSerializationAdapters: SerializersModule
get() { return kotlinxSerializationAdapters }
@JvmStatic
val moshi: Moshi by lazy {
moshiBuilder.build()
val kotlinxSerializationAdapters = SerializersModule {
contextual(BigDecimal::class, BigDecimalAdapter)
contextual(BigInteger::class, BigIntegerAdapter)
contextual(LocalDate::class, LocalDateAdapter)
contextual(LocalDateTime::class, LocalDateTimeAdapter)
contextual(OffsetDateTime::class, OffsetDateTimeAdapter)
contextual(UUID::class, UUIDAdapter)
contextual(AtomicInteger::class, AtomicIntegerAdapter)
contextual(AtomicLong::class, AtomicLongAdapter)
contextual(AtomicBoolean::class, AtomicBooleanAdapter)
contextual(URI::class, URIAdapter)
contextual(URL::class, URLAdapter)
contextual(StringBuilder::class, StringBuilderAdapter)
}
@Deprecated("Use Serializer.kotlinxSerializationJson instead", replaceWith = ReplaceWith("Serializer.kotlinxSerializationJson"))
@JvmStatic
val jvmJson: Json
get() { return kotlinxSerializationJson }
@JvmStatic
val kotlinxSerializationJson: Json by lazy {
Json {
serializersModule = kotlinxSerializationAdapters
ignoreUnknownKeys = true
isLenient = true
}
}
}

View File

@@ -0,0 +1,20 @@
package org.openapitools.client.infrastructure
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
@Serializer(forClass = StringBuilder::class)
object StringBuilderAdapter : KSerializer<StringBuilder> {
override fun serialize(encoder: Encoder, value: StringBuilder) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): StringBuilder = StringBuilder(decoder.decodeString())
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("StringBuilder", PrimitiveKind.STRING)
}

View File

@@ -1,13 +1,21 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.net.URI
class URIAdapter {
@ToJson
fun toJson(uri: URI) = uri.toString()
@Serializer(forClass = URI::class)
object URIAdapter : KSerializer<URI> {
override fun serialize(encoder: Encoder, value: URI) {
encoder.encodeString(value.toASCIIString())
}
@FromJson
fun fromJson(s: String): URI = URI.create(s)
override fun deserialize(decoder: Decoder): URI = URI(decoder.decodeString())
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("URI", PrimitiveKind.STRING)
}

View File

@@ -0,0 +1,21 @@
package org.openapitools.client.infrastructure
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.net.URL
@Serializer(forClass = URL::class)
object URLAdapter : KSerializer<URL> {
override fun serialize(encoder: Encoder, value: URL) {
encoder.encodeString(value.toExternalForm())
}
override fun deserialize(decoder: Decoder): URL = URL(decoder.decodeString())
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("URL", PrimitiveKind.STRING)
}

View File

@@ -1,13 +1,23 @@
package org.openapitools.client.infrastructure
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.SerialDescriptor
import java.util.UUID
class UUIDAdapter {
@ToJson
fun toJson(uuid: UUID) = uuid.toString()
@Serializer(forClass = UUID::class)
object UUIDAdapter : KSerializer<UUID> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
@FromJson
fun fromJson(s: String): UUID = UUID.fromString(s)
override fun serialize(encoder: Encoder, value: UUID) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder): UUID {
return UUID.fromString(decoder.decodeString())
}
}

View File

@@ -21,7 +21,14 @@
package org.openapitools.client.models
import com.squareup.moshi.Json
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
import kotlinx.serialization.Contextual
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@@ -32,13 +39,13 @@ import kotlinx.parcelize.Parcelize
* @param name
*/
@Parcelize
@Serializable
data class Category (
@Json(name = "id")
@SerialName(value = "id")
val id: kotlin.Long? = null,
@Json(name = "name")
@SerialName(value = "name")
val name: kotlin.String? = null
) : Parcelable

View File

@@ -21,7 +21,14 @@
package org.openapitools.client.models
import com.squareup.moshi.Json
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
import kotlinx.serialization.Contextual
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@@ -33,16 +40,16 @@ import kotlinx.parcelize.Parcelize
* @param message
*/
@Parcelize
@Serializable
data class ModelApiResponse (
@Json(name = "code")
@SerialName(value = "code")
val code: kotlin.Int? = null,
@Json(name = "type")
@SerialName(value = "type")
val type: kotlin.String? = null,
@Json(name = "message")
@SerialName(value = "message")
val message: kotlin.String? = null
) : Parcelable

View File

@@ -21,7 +21,14 @@
package org.openapitools.client.models
import com.squareup.moshi.Json
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
import kotlinx.serialization.Contextual
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@@ -36,26 +43,26 @@ import kotlinx.parcelize.Parcelize
* @param complete
*/
@Parcelize
@Serializable
data class Order (
@Json(name = "id")
@SerialName(value = "id")
val id: kotlin.Long? = null,
@Json(name = "petId")
@SerialName(value = "petId")
val petId: kotlin.Long? = null,
@Json(name = "quantity")
@SerialName(value = "quantity")
val quantity: kotlin.Int? = null,
@Json(name = "shipDate")
@Contextual @SerialName(value = "shipDate")
val shipDate: java.time.OffsetDateTime? = null,
/* Order Status */
@Json(name = "status")
@SerialName(value = "status")
val status: Order.Status? = null,
@Json(name = "complete")
@SerialName(value = "complete")
val complete: kotlin.Boolean? = false
) : Parcelable {
@@ -63,12 +70,29 @@ data class Order (
/**
* Order Status
*
* Values: placed,approved,delivered
* Values: placed,approved,delivered,unknownDefaultOpenApi
*/
@Serializable(with = OrderSerializer::class)
enum class Status(val value: kotlin.String) {
@Json(name = "placed") placed("placed"),
@Json(name = "approved") approved("approved"),
@Json(name = "delivered") delivered("delivered");
@SerialName(value = "placed") placed("placed"),
@SerialName(value = "approved") approved("approved"),
@SerialName(value = "delivered") delivered("delivered"),
@SerialName(value = "unknown_default_open_api") unknownDefaultOpenApi("unknown_default_open_api");
}
@Serializer(forClass = Status::class)
internal object StatusSerializer : KSerializer<Status> {
override val descriptor = kotlin.String.serializer().descriptor
override fun deserialize(decoder: Decoder): Status {
val value = decoder.decodeSerializableValue(kotlin.String.serializer())
return Status.values().firstOrNull { it.value == value }
?: Status.unknownDefaultOpenApi
}
override fun serialize(encoder: Encoder, value: Status) {
encoder.encodeSerializableValue(kotlin.String.serializer(), value.value)
}
}
}

View File

@@ -23,7 +23,14 @@ package org.openapitools.client.models
import org.openapitools.client.models.Category
import org.openapitools.client.models.Tag
import com.squareup.moshi.Json
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
import kotlinx.serialization.Contextual
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@@ -38,26 +45,26 @@ import kotlinx.parcelize.Parcelize
* @param status pet status in the store
*/
@Parcelize
@Serializable
data class Pet (
@Json(name = "name")
@SerialName(value = "name")
val name: kotlin.String,
@Json(name = "photoUrls")
@SerialName(value = "photoUrls")
val photoUrls: kotlin.collections.List<kotlin.String>,
@Json(name = "id")
@SerialName(value = "id")
val id: kotlin.Long? = null,
@Json(name = "category")
@SerialName(value = "category")
val category: Category? = null,
@Json(name = "tags")
@SerialName(value = "tags")
val tags: kotlin.collections.List<Tag>? = null,
/* pet status in the store */
@Json(name = "status")
@SerialName(value = "status")
val status: Pet.Status? = null
) : Parcelable {
@@ -65,12 +72,29 @@ data class Pet (
/**
* pet status in the store
*
* Values: available,pending,sold
* Values: available,pending,sold,unknownDefaultOpenApi
*/
@Serializable(with = PetSerializer::class)
enum class Status(val value: kotlin.String) {
@Json(name = "available") available("available"),
@Json(name = "pending") pending("pending"),
@Json(name = "sold") sold("sold");
@SerialName(value = "available") available("available"),
@SerialName(value = "pending") pending("pending"),
@SerialName(value = "sold") sold("sold"),
@SerialName(value = "unknown_default_open_api") unknownDefaultOpenApi("unknown_default_open_api");
}
@Serializer(forClass = Status::class)
internal object StatusSerializer : KSerializer<Status> {
override val descriptor = kotlin.String.serializer().descriptor
override fun deserialize(decoder: Decoder): Status {
val value = decoder.decodeSerializableValue(kotlin.String.serializer())
return Status.values().firstOrNull { it.value == value }
?: Status.unknownDefaultOpenApi
}
override fun serialize(encoder: Encoder, value: Status) {
encoder.encodeSerializableValue(kotlin.String.serializer(), value.value)
}
}
}

View File

@@ -21,7 +21,14 @@
package org.openapitools.client.models
import com.squareup.moshi.Json
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
import kotlinx.serialization.Contextual
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@@ -32,13 +39,13 @@ import kotlinx.parcelize.Parcelize
* @param name
*/
@Parcelize
@Serializable
data class Tag (
@Json(name = "id")
@SerialName(value = "id")
val id: kotlin.Long? = null,
@Json(name = "name")
@SerialName(value = "name")
val name: kotlin.String? = null
) : Parcelable

View File

@@ -21,7 +21,14 @@
package org.openapitools.client.models
import com.squareup.moshi.Json
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
import kotlinx.serialization.Contextual
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@@ -38,32 +45,32 @@ import kotlinx.parcelize.Parcelize
* @param userStatus User Status
*/
@Parcelize
@Serializable
data class User (
@Json(name = "id")
@SerialName(value = "id")
val id: kotlin.Long? = null,
@Json(name = "username")
@SerialName(value = "username")
val username: kotlin.String? = null,
@Json(name = "firstName")
@SerialName(value = "firstName")
val firstName: kotlin.String? = null,
@Json(name = "lastName")
@SerialName(value = "lastName")
val lastName: kotlin.String? = null,
@Json(name = "email")
@SerialName(value = "email")
val email: kotlin.String? = null,
@Json(name = "password")
@SerialName(value = "password")
val password: kotlin.String? = null,
@Json(name = "phone")
@SerialName(value = "phone")
val phone: kotlin.String? = null,
/* User Status */
@Json(name = "userStatus")
@SerialName(value = "userStatus")
val userStatus: kotlin.Int? = null
) : Parcelable