Skip to content

Commit 96adf2f

Browse files
authored
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
1 parent d442fc9 commit 96adf2f

File tree

3 files changed

+6
-6
lines changed
  • modules/openapi-generator/src/main/resources/kotlin-client
  • samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models

3 files changed

+6
-6
lines changed

modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
111111
*/
112112
{{^multiplatform}}
113113
{{#kotlinx_serialization}}
114-
{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{#enumUnknownDefaultCase}}(with = {{classname}}Serializer::class){{/enumUnknownDefaultCase}}{{/serializableModel}}
114+
{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{#enumUnknownDefaultCase}}(with = {{{nameInPascalCase}}}Serializer::class){{/enumUnknownDefaultCase}}{{/serializableModel}}
115115
{{/kotlinx_serialization}}
116116
{{#moshi}}
117117
@JsonClass(generateAdapter = false)
@@ -147,16 +147,16 @@ import {{packageName}}.infrastructure.ITransformForStorage
147147
{{#enumUnknownDefaultCase}}
148148

149149
internal object {{nameInPascalCase}}Serializer : KSerializer<{{nameInPascalCase}}> {
150-
override val descriptor = {{{dataType}}}.serializer().descriptor
150+
override val descriptor = {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}.serializer().descriptor
151151

152152
override fun deserialize(decoder: Decoder): {{nameInPascalCase}} {
153-
val value = decoder.decodeSerializableValue({{{dataType}}}.serializer())
153+
val value = decoder.decodeSerializableValue({{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}.serializer())
154154
return {{nameInPascalCase}}.values().firstOrNull { it.value == value }
155155
?: {{nameInPascalCase}}.{{#allowableValues}}{{#enumVars}}{{#-last}}{{&name}}{{/-last}}{{/enumVars}}{{/allowableValues}}
156156
}
157157

158158
override fun serialize(encoder: Encoder, value: {{nameInPascalCase}}) {
159-
encoder.encodeSerializableValue({{{dataType}}}.serializer(), value.value)
159+
encoder.encodeSerializableValue({{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}.serializer(), value.value)
160160
}
161161
}
162162
{{/enumUnknownDefaultCase}}

samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ data class Order (
6868
*
6969
* Values: placed,approved,delivered,unknown_default_open_api
7070
*/
71-
@Serializable(with = OrderSerializer::class)
71+
@Serializable(with = StatusSerializer::class)
7272
enum class Status(val value: kotlin.String) {
7373
@SerialName(value = "placed") placed("placed"),
7474
@SerialName(value = "approved") approved("approved"),

samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ data class Pet (
7070
*
7171
* Values: available,pending,sold,unknown_default_open_api
7272
*/
73-
@Serializable(with = PetSerializer::class)
73+
@Serializable(with = StatusSerializer::class)
7474
enum class Status(val value: kotlin.String) {
7575
@SerialName(value = "available") available("available"),
7676
@SerialName(value = "pending") pending("pending"),

0 commit comments

Comments
 (0)