Skip to content

Commit fc29daa

Browse files
authored
Add enums to scala-http4s-server (#21320)
1 parent db38f0f commit fc29daa

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttp4sServerCodegen.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,16 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
350350
// model oneOf as sealed trait
351351

352352
CodegenModel cModel = model.getModel();
353-
cModel.getVendorExtensions().put("x-isSealedTrait", !cModel.oneOf.isEmpty());
353+
354+
if (!cModel.oneOf.isEmpty()) {
355+
cModel.getVendorExtensions().put("x-isSealedTrait", true);
356+
}
357+
else if (cModel.isEnum) {
358+
cModel.getVendorExtensions().put("x-isEnum", true);
359+
360+
} else {
361+
cModel.getVendorExtensions().put("x-another", true);
362+
}
354363

355364
if (cModel.discriminator != null) {
356365
cModel.getVendorExtensions().put("x-use-discr", true);

modules/openapi-generator/src/main/resources/scala-http4s-server/types.mustache

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ import io.circe.generic.semiauto.{ deriveDecoder, deriveEncoder }
1111
import {{.}}
1212
{{/imports}}
1313

14+
{{#models}}
15+
{{#model}}
16+
{{#vendorExtensions.x-isEnum}}
17+
import {{modelPackage}}.{{classname}}.{{classname}}
18+
{{/vendorExtensions.x-isEnum}}
19+
{{/model}}
20+
{{/models}}
1421
{{#models}}
1522
{{#model}}
1623
/**
@@ -82,7 +89,19 @@ object {{classname}} {
8289
}
8390
{{/vendorExtensions.x-isSealedTrait}}
8491

85-
{{^vendorExtensions.x-isSealedTrait}}
92+
{{#vendorExtensions.x-isEnum}}
93+
object {{classname}} extends Enumeration {
94+
type {{classname}} = Value
95+
{{#allowableValues}}
96+
{{#values}}
97+
val {{.}} = Value
98+
{{/values}}
99+
{{/allowableValues}}
100+
implicit val decoder: Decoder[{{classname}}.Value] = Decoder.decodeEnumeration({{classname}})
101+
implicit val encoder: Encoder[{{classname}}.Value] = Encoder.encodeEnumeration({{classname}})
102+
}
103+
{{/vendorExtensions.x-isEnum}}
104+
{{#vendorExtensions.x-another}}
86105
case class {{classname}}(
87106
{{#vars}}
88107
{{name}}: {{^required}}Option[{{{vendorExtensions.x-type}}}]{{/required}}{{#required}}{{{vendorExtensions.x-type}}}{{/required}}{{^-last}},{{/-last}}
@@ -92,7 +111,7 @@ object {{classname}} {
92111
implicit val encoder{{classname}}: Encoder[{{classname}}] = deriveEncoder[{{classname}}].mapJson(_.dropNullValues)
93112
implicit val decoder{{classname}}: Decoder[{{classname}}] = deriveDecoder[{{classname}}]
94113
}
95-
{{/vendorExtensions.x-isSealedTrait}}
114+
{{/vendorExtensions.x-another}}
96115

97116
{{/model}}
98117
{{/models}}

0 commit comments

Comments
 (0)