Skip to content

Commit 5b72747

Browse files
committed
use custom serializer for non string enums for multiplatform library
1 parent 0e1cba6 commit 5b72747

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import kotlinx.serialization.*
4646
*
4747
* Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}}
4848
*/
49-
{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}@Serializable{{#enumUnknownDefaultCase}}(with = {{classname}}Serializer::class){{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}{{^isString}}(with = {{classname}}Serializer::class){{/isString}}{{/enumUnknownDefaultCase}}{{/kotlinx_serialization}}
49+
{{#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}}
5050
{{^multiplatform}}
5151
{{#moshi}}
5252
@JsonClass(generateAdapter = false)
@@ -71,7 +71,9 @@ import kotlinx.serialization.*
7171
{{/kotlinx_serialization}}
7272
{{/multiplatform}}
7373
{{#multiplatform}}
74+
{{#isString}}
7475
@SerialName(value = {{#lambda.doublequote}}{{{value}}}{{/lambda.doublequote}})
76+
{{/isString}}
7577
{{/multiplatform}}
7678
{{#isArray}}
7779
{{#isList}}
@@ -146,4 +148,19 @@ internal object {{classname}}Serializer : KSerializer<{{classname}}> {
146148
}
147149
}
148150
{{/isString}}{{/enumUnknownDefaultCase}}
149-
{{/kotlinx_serialization}}
151+
{{/kotlinx_serialization}}
152+
{{#multiplatform}}{{^isString}}
153+
internal object {{classname}}Serializer : KSerializer<{{classname}}> {
154+
override val descriptor = {{dataType}}.serializer().descriptor
155+
156+
override fun deserialize(decoder: Decoder): {{classname}} {
157+
val value = decoder.decodeSerializableValue({{{dataType}}}.serializer())
158+
return {{classname}}.values().firstOrNull { it.value == value }
159+
?: throw IllegalArgumentException("Unknown enum value: $value")
160+
}
161+
162+
override fun serialize(encoder: Encoder, value: {{classname}}) {
163+
encoder.encodeSerializableValue({{{dataType}}}.serializer(), value.value)
164+
}
165+
}
166+
{{/isString}}{{/multiplatform}}

0 commit comments

Comments
 (0)