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
This commit is contained in:
Jan Škrášek 2024-11-14 15:11:08 +01:00 committed by GitHub
parent d442fc9a65
commit 96adf2f8f5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 6 additions and 6 deletions

View File

@ -111,7 +111,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
*/ */
{{^multiplatform}} {{^multiplatform}}
{{#kotlinx_serialization}} {{#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}} {{/kotlinx_serialization}}
{{#moshi}} {{#moshi}}
@JsonClass(generateAdapter = false) @JsonClass(generateAdapter = false)
@ -147,16 +147,16 @@ import {{packageName}}.infrastructure.ITransformForStorage
{{#enumUnknownDefaultCase}} {{#enumUnknownDefaultCase}}
internal object {{nameInPascalCase}}Serializer : KSerializer<{{nameInPascalCase}}> { 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}} { 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 } return {{nameInPascalCase}}.values().firstOrNull { it.value == value }
?: {{nameInPascalCase}}.{{#allowableValues}}{{#enumVars}}{{#-last}}{{&name}}{{/-last}}{{/enumVars}}{{/allowableValues}} ?: {{nameInPascalCase}}.{{#allowableValues}}{{#enumVars}}{{#-last}}{{&name}}{{/-last}}{{/enumVars}}{{/allowableValues}}
} }
override fun serialize(encoder: Encoder, value: {{nameInPascalCase}}) { 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}} {{/enumUnknownDefaultCase}}

View File

@ -68,7 +68,7 @@ data class Order (
* *
* Values: placed,approved,delivered,unknown_default_open_api * Values: placed,approved,delivered,unknown_default_open_api
*/ */
@Serializable(with = OrderSerializer::class) @Serializable(with = StatusSerializer::class)
enum class Status(val value: kotlin.String) { enum class Status(val value: kotlin.String) {
@SerialName(value = "placed") placed("placed"), @SerialName(value = "placed") placed("placed"),
@SerialName(value = "approved") approved("approved"), @SerialName(value = "approved") approved("approved"),

View File

@ -70,7 +70,7 @@ data class Pet (
* *
* Values: available,pending,sold,unknown_default_open_api * Values: available,pending,sold,unknown_default_open_api
*/ */
@Serializable(with = PetSerializer::class) @Serializable(with = StatusSerializer::class)
enum class Status(val value: kotlin.String) { enum class Status(val value: kotlin.String) {
@SerialName(value = "available") available("available"), @SerialName(value = "available") available("available"),
@SerialName(value = "pending") pending("pending"), @SerialName(value = "pending") pending("pending"),