Add enums to scala-http4s-server (#21320)

This commit is contained in:
KatyaValik 2025-06-16 08:42:02 +05:00 committed by GitHub
parent db38f0f556
commit fc29daa6c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 3 deletions

View File

@ -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);

View File

@ -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}}