From 5b727476243309a1edb5c41ac153060b26225b30 Mon Sep 17 00:00:00 2001 From: rlnt Date: Wed, 17 Sep 2025 09:49:27 +0200 Subject: [PATCH 1/2] use custom serializer for non string enums for multiplatform library --- .../kotlin-client/enum_class.mustache | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache index 16326a77fe02..0f9339f6970f 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache @@ -46,7 +46,7 @@ import kotlinx.serialization.* * * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} */ -{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}@Serializable{{#enumUnknownDefaultCase}}(with = {{classname}}Serializer::class){{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}{{^isString}}(with = {{classname}}Serializer::class){{/isString}}{{/enumUnknownDefaultCase}}{{/kotlinx_serialization}} +{{#multiplatform}}@Serializable{{^isString}}(with = {{classname}}Serializer::class){{/isString}}{{/multiplatform}}{{#kotlinx_serialization}}@Serializable{{#enumUnknownDefaultCase}}(with = {{classname}}Serializer::class){{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}{{^isString}}(with = {{classname}}Serializer::class){{/isString}}{{/enumUnknownDefaultCase}}{{/kotlinx_serialization}} {{^multiplatform}} {{#moshi}} @JsonClass(generateAdapter = false) @@ -71,7 +71,9 @@ import kotlinx.serialization.* {{/kotlinx_serialization}} {{/multiplatform}} {{#multiplatform}} + {{#isString}} @SerialName(value = {{#lambda.doublequote}}{{{value}}}{{/lambda.doublequote}}) + {{/isString}} {{/multiplatform}} {{#isArray}} {{#isList}} @@ -146,4 +148,19 @@ internal object {{classname}}Serializer : KSerializer<{{classname}}> { } } {{/isString}}{{/enumUnknownDefaultCase}} -{{/kotlinx_serialization}} \ No newline at end of file +{{/kotlinx_serialization}} +{{#multiplatform}}{{^isString}} +internal object {{classname}}Serializer : KSerializer<{{classname}}> { + override val descriptor = {{dataType}}.serializer().descriptor + + override fun deserialize(decoder: Decoder): {{classname}} { + val value = decoder.decodeSerializableValue({{{dataType}}}.serializer()) + return {{classname}}.values().firstOrNull { it.value == value } + ?: throw IllegalArgumentException("Unknown enum value: $value") + } + + override fun serialize(encoder: Encoder, value: {{classname}}) { + encoder.encodeSerializableValue({{{dataType}}}.serializer(), value.value) + } +} +{{/isString}}{{/multiplatform}} \ No newline at end of file From 42cfb4b8a1ef6c90e3073c07e2a25ab6da4b4220 Mon Sep 17 00:00:00 2001 From: rlnt Date: Wed, 17 Sep 2025 11:08:30 +0200 Subject: [PATCH 2/2] add missing imports --- .../src/main/resources/kotlin-client/enum_class.mustache | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache index 0f9339f6970f..d8ef1ea080ba 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache @@ -39,6 +39,9 @@ import kotlinx.serialization.encoding.Encoder {{/multiplatform}} {{#multiplatform}} import kotlinx.serialization.* +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder {{/multiplatform}} /** @@ -163,4 +166,4 @@ internal object {{classname}}Serializer : KSerializer<{{classname}}> { encoder.encodeSerializableValue({{{dataType}}}.serializer(), value.value) } } -{{/isString}}{{/multiplatform}} \ No newline at end of file +{{/isString}}{{/multiplatform}}