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}}
{{#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}}

View File

@ -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"),

View File

@ -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"),