mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-19 19:07:05 +00:00
[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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user