diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java index 44711d8e1c3..bb3f4d30e8f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java @@ -350,7 +350,16 @@ public class ScalaHttp4sServerCodegen extends DefaultCodegen implements CodegenC // model oneOf as sealed trait CodegenModel cModel = model.getModel(); - cModel.getVendorExtensions().put("x-isSealedTrait", !cModel.oneOf.isEmpty()); + + if (!cModel.oneOf.isEmpty()) { + cModel.getVendorExtensions().put("x-isSealedTrait", true); + } + else if (cModel.isEnum) { + cModel.getVendorExtensions().put("x-isEnum", true); + + } else { + cModel.getVendorExtensions().put("x-another", true); + } if (cModel.discriminator != null) { cModel.getVendorExtensions().put("x-use-discr", true); diff --git a/modules/openapi-generator/src/main/resources/scala-http4s-server/types.mustache b/modules/openapi-generator/src/main/resources/scala-http4s-server/types.mustache index 53b5851b99e..dab5265181d 100644 --- a/modules/openapi-generator/src/main/resources/scala-http4s-server/types.mustache +++ b/modules/openapi-generator/src/main/resources/scala-http4s-server/types.mustache @@ -11,6 +11,13 @@ import io.circe.generic.semiauto.{ deriveDecoder, deriveEncoder } import {{.}} {{/imports}} +{{#models}} +{{#model}} +{{#vendorExtensions.x-isEnum}} +import {{modelPackage}}.{{classname}}.{{classname}} +{{/vendorExtensions.x-isEnum}} +{{/model}} +{{/models}} {{#models}} {{#model}} /** @@ -82,7 +89,19 @@ object {{classname}} { } {{/vendorExtensions.x-isSealedTrait}} -{{^vendorExtensions.x-isSealedTrait}} +{{#vendorExtensions.x-isEnum}} +object {{classname}} extends Enumeration { + type {{classname}} = Value + {{#allowableValues}} + {{#values}} + val {{.}} = Value + {{/values}} + {{/allowableValues}} + implicit val decoder: Decoder[{{classname}}.Value] = Decoder.decodeEnumeration({{classname}}) + implicit val encoder: Encoder[{{classname}}.Value] = Encoder.encodeEnumeration({{classname}}) +} +{{/vendorExtensions.x-isEnum}} +{{#vendorExtensions.x-another}} case class {{classname}}( {{#vars}} {{name}}: {{^required}}Option[{{{vendorExtensions.x-type}}}]{{/required}}{{#required}}{{{vendorExtensions.x-type}}}{{/required}}{{^-last}},{{/-last}} @@ -92,7 +111,7 @@ object {{classname}} { implicit val encoder{{classname}}: Encoder[{{classname}}] = deriveEncoder[{{classname}}].mapJson(_.dropNullValues) implicit val decoder{{classname}}: Decoder[{{classname}}] = deriveDecoder[{{classname}}] } -{{/vendorExtensions.x-isSealedTrait}} +{{/vendorExtensions.x-another}} {{/model}} {{/models}}