From 96adf2f8f530c14cd3bf2b0c38d81a19be889c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20=C5=A0kr=C3=A1=C5=A1ek?= Date: Thu, 14 Nov 2024 15:11:08 +0100 Subject: [PATCH] Fix explicit KSerializer's name & generation when used in container (#20093) * [kotlin][client] properly reference the same custom serializer name * [kotlin][client] properly use correct type when enum in container --- .../src/main/resources/kotlin-client/data_class.mustache | 8 ++++---- .../main/kotlin/org/openapitools/client/models/Order.kt | 2 +- .../src/main/kotlin/org/openapitools/client/models/Pet.kt | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache index d95ce940346..dc5d13516b9 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache @@ -111,7 +111,7 @@ import {{packageName}}.infrastructure.ITransformForStorage */ {{^multiplatform}} {{#kotlinx_serialization}} - {{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{#enumUnknownDefaultCase}}(with = {{classname}}Serializer::class){{/enumUnknownDefaultCase}}{{/serializableModel}} + {{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{#enumUnknownDefaultCase}}(with = {{{nameInPascalCase}}}Serializer::class){{/enumUnknownDefaultCase}}{{/serializableModel}} {{/kotlinx_serialization}} {{#moshi}} @JsonClass(generateAdapter = false) @@ -147,16 +147,16 @@ import {{packageName}}.infrastructure.ITransformForStorage {{#enumUnknownDefaultCase}} internal object {{nameInPascalCase}}Serializer : KSerializer<{{nameInPascalCase}}> { - override val descriptor = {{{dataType}}}.serializer().descriptor + override val descriptor = {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}.serializer().descriptor override fun deserialize(decoder: Decoder): {{nameInPascalCase}} { - val value = decoder.decodeSerializableValue({{{dataType}}}.serializer()) + val value = decoder.decodeSerializableValue({{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}.serializer()) return {{nameInPascalCase}}.values().firstOrNull { it.value == value } ?: {{nameInPascalCase}}.{{#allowableValues}}{{#enumVars}}{{#-last}}{{&name}}{{/-last}}{{/enumVars}}{{/allowableValues}} } override fun serialize(encoder: Encoder, value: {{nameInPascalCase}}) { - encoder.encodeSerializableValue({{{dataType}}}.serializer(), value.value) + encoder.encodeSerializableValue({{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}.serializer(), value.value) } } {{/enumUnknownDefaultCase}} diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt index 930809c6ab3..34b443ec439 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -68,7 +68,7 @@ data class Order ( * * Values: placed,approved,delivered,unknown_default_open_api */ - @Serializable(with = OrderSerializer::class) + @Serializable(with = StatusSerializer::class) enum class Status(val value: kotlin.String) { @SerialName(value = "placed") placed("placed"), @SerialName(value = "approved") approved("approved"), diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt index 111a57966c5..96cdd5295ca 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -70,7 +70,7 @@ data class Pet ( * * Values: available,pending,sold,unknown_default_open_api */ - @Serializable(with = PetSerializer::class) + @Serializable(with = StatusSerializer::class) enum class Status(val value: kotlin.String) { @SerialName(value = "available") available("available"), @SerialName(value = "pending") pending("pending"),