From cf1734044ff7f880a1f79267dc7cfa88a22ed77a Mon Sep 17 00:00:00 2001 From: Michael Kutzner <174690291+MichaelKutzner@users.noreply.github.com> Date: Sun, 17 May 2026 08:07:29 +0200 Subject: [PATCH 1/3] Fix discriminator mapping --- .../codegen/languages/ScalaHttp4sClientCodegen.java | 4 ++-- .../src/main/resources/scala-http4s/model.mustache | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sClientCodegen.java index 04e1086dc85d..2351c1d4d0eb 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sClientCodegen.java @@ -406,7 +406,7 @@ public Map postProcessAllModels(Map objs) childModel.getVendorExtensions().put("x-oneOfParent", cModel.classname); // Store parent's discriminator info for use in template if (cModel.discriminator != null) { - childModel.getVendorExtensions().put("x-parentDiscriminatorName", cModel.discriminator.getPropertyName()); + childModel.getVendorExtensions().put("x-parentDiscriminatorBaseName", cModel.discriminator.getPropertyBaseName()); } oneOfMembers.add(childModel); @@ -461,7 +461,7 @@ public Map postProcessAllModels(Map objs) for (CodegenModel member : oneOfMembers) { member.getVendorExtensions().remove("x-isOneOfMember"); member.getVendorExtensions().remove("x-oneOfParent"); - member.getVendorExtensions().remove("x-parentDiscriminatorName"); + member.getVendorExtensions().remove("x-parentDiscriminatorBaseName"); } if (oneOfMembers.isEmpty()) { diff --git a/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache b/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache index f47595deff98..e387cd321070 100644 --- a/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache +++ b/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache @@ -109,12 +109,12 @@ object {{classname}} { // with discriminator, no mapping given encoder{{classname}}: Encoder[{{classname}}] = Encoder.instance { {{#vendorExtensions.x-oneOfMembers}} - case obj: {{classname}} => obj.asJson.mapObject(("{{vendorExtensions.x-parentDiscriminatorName}}" -> "{{name}}".asJson) +: _) + case obj: {{classname}} => obj.asJson.mapObject(("{{vendorExtensions.x-parentDiscriminatorBaseName}}" -> "{{name}}".asJson) +: _) {{/vendorExtensions.x-oneOfMembers}} } given decoder{{classname}}: Decoder[{{classname}}] = Decoder.instance { cursor => - cursor.downField("{{discriminator.propertyName}}").as[String].flatMap { + cursor.downField("{{discriminator.propertyBaseName}}").as[String].flatMap { {{#vendorExtensions.x-oneOfMembers}} case "{{name}}" => cursor.as[{{classname}}] {{/vendorExtensions.x-oneOfMembers}} From 772c397f750ad2b73df10a8806918e5673bf74ae Mon Sep 17 00:00:00 2001 From: Michael Kutzner <174690291+MichaelKutzner@users.noreply.github.com> Date: Sun, 17 May 2026 08:26:37 +0200 Subject: [PATCH 2/3] Fix issue for discriminator mapping --- .../src/main/resources/scala-http4s/model.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache b/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache index e387cd321070..f143e1574d2d 100644 --- a/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache +++ b/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache @@ -128,12 +128,12 @@ object {{classname}} { {{#discriminator}} given encoder{{classname}}: Encoder[{{classname}}] = Encoder.instance { {{#mappedModels}} - case obj: {{model.classname}} => obj.asJson.mapObject(("{{propertyName}}" -> "{{mappingName}}".asJson) +: _) + case obj: {{model.classname}} => obj.asJson.mapObject(("{{propertyBaseName}}" -> "{{mappingName}}".asJson) +: _) {{/mappedModels}} } given decoder{{classname}}: Decoder[{{classname}}] = Decoder.instance { cursor => - cursor.downField("{{propertyName}}").as[String].flatMap { + cursor.downField("{{propertyBaseName}}").as[String].flatMap { {{#mappedModels}} case "{{mappingName}}" => cursor.as[{{model.classname}}] {{/mappedModels}} From 78d26635f5f039099e6b2672a594208f94abcc44 Mon Sep 17 00:00:00 2001 From: Michael Kutzner <174690291+MichaelKutzner@users.noreply.github.com> Date: Sun, 17 May 2026 09:23:47 +0200 Subject: [PATCH 3/3] Fix issue for nested oneOf (not sealed trait) --- .../src/main/resources/scala-http4s/model.mustache | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache b/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache index f143e1574d2d..0f52fc14afc9 100644 --- a/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache +++ b/modules/openapi-generator/src/main/resources/scala-http4s/model.mustache @@ -44,12 +44,12 @@ object {{classname}} { // with discriminator, no mapping given encoder{{classname}}: Encoder[{{classname}}] = Encoder.instance { {{#vendorExtensions.x-discriminator-entries}} - case obj: {{classname}} => obj.asJson.mapObject(("{{discriminator.propertyName}}" -> "{{schemaName}}".asJson) +: _) + case obj: {{classname}} => obj.asJson.mapObject(("{{discriminator.propertyBaseName}}" -> "{{schemaName}}".asJson) +: _) {{/vendorExtensions.x-discriminator-entries}} } given decoder{{classname}}: Decoder[{{classname}}] = Decoder.instance { cursor => - cursor.downField("{{discriminator.propertyName}}").as[String].flatMap { + cursor.downField("{{discriminator.propertyBaseName}}").as[String].flatMap { {{#vendorExtensions.x-discriminator-entries}} case "{{schemaName}}" => cursor.as[{{classname}}] {{/vendorExtensions.x-discriminator-entries}} @@ -63,12 +63,12 @@ object {{classname}} { {{#discriminator}} given encoder{{classname}}: Encoder[{{classname}}] = Encoder.instance { {{#mappedModels}} - case obj: {{model.classname}} => obj.asJson.mapObject(("{{propertyName}}" -> "{{mappingName}}".asJson) +: _) + case obj: {{model.classname}} => obj.asJson.mapObject(("{{propertyBaseName}}" -> "{{mappingName}}".asJson) +: _) {{/mappedModels}} } given decoder{{classname}}: Decoder[{{classname}}] = Decoder.instance { cursor => - cursor.downField("{{propertyName}}").as[String].flatMap { + cursor.downField("{{propertyBaseName}}").as[String].flatMap { {{#mappedModels}} case "{{mappingName}}" => cursor.as[{{model.classname}}] {{/mappedModels}}