Skip to content

[BUG] [scala-sttp] [circe] Encoder/decoder not generated for inline enumeration definition #21027

@bmironenko

Description

@bmironenko

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • Have you tested with the latest master to confirm the issue still exists?
  • Have you searched for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description

JSON encoder and decoder are not generated for an enumeration if it is defined "inline", rather than as a component.

openapi-generator version
$ openapi-generator-cli --version
openapi-generator-cli 7.12.0
commit : afc27ef
built  : -999999999-01-01T00:00:00+18:00
source : https://github.com/openapitools/openapi-generator
docs   : https://openapi-generator.tech/
OpenAPI declaration file content or url

widget-api.yml

Generation Details
$ openapi-generator-cli generate \
-i widget-api.yml \
-g scala-sttp \
--additional-properties=jsonLibrary=circe,mainPackage=com.acme.widgets
[main] WARN  o.o.codegen.DefaultCodegen - OpenAPI 3.1 support is still in beta. To report an issue related to 3.1 spec, please kindly open an issue in the Github repo: https://github.com/openAPITools/openapi-generator.
[main] INFO  o.o.codegen.DefaultGenerator - Generating with dryRun=false
[main] INFO  o.o.codegen.DefaultGenerator - OpenAPI Generator: scala-sttp (client)
[main] INFO  o.o.codegen.DefaultGenerator - Generator 'scala-sttp' is considered stable.
[main] INFO  o.o.c.languages.AbstractScalaCodegen - Environment variable SCALA_POST_PROCESS_FILE not defined so the Scala code may not be properly formatted. To define it, try 'export SCALA_POST_PROCESS_FILE=/usr/local/bin/scalafmt' (Linux/Mac)
[main] INFO  o.o.c.languages.AbstractScalaCodegen - NOTE: To enable file post-processing, 'enablePostProcessFile' must be set to `true` (--enable-post-process-file for CLI).
[main] WARN  o.o.codegen.DefaultCodegen - OpenAPI 3.1 support is still in beta. To report an issue related to 3.1 spec, please kindly open an issue in the Github repo: https://github.com/openAPITools/openapi-generator.
[main] INFO  o.o.codegen.TemplateManager - writing file ./src/main/scala/com/acme/widgets/model/Widget.scala
[main] INFO  o.o.codegen.TemplateManager - writing file ./src/main/scala/com/acme/widgets/api/DefaultApi.scala
[main] INFO  o.o.codegen.TemplateManager - Ignored ./README.md (Ignored by rule in ignore file.)
[main] INFO  o.o.codegen.TemplateManager - Ignored ./build.sbt (Ignored by rule in ignore file.)
[main] INFO  o.o.codegen.TemplateManager - writing file ./src/main/scala/com/acme/widgets/core/JsonSupport.scala
[main] INFO  o.o.codegen.TemplateManager - writing file ./src/main/scala/com/acme/widgets/core/AdditionalTypeSerializers.scala
[main] INFO  o.o.codegen.TemplateManager - writing file ./project/build.properties
[main] INFO  o.o.codegen.TemplateManager - writing file ./src/main/scala/com/acme/widgets/core/DateSerializers.scala
[main] INFO  o.o.codegen.TemplateManager - Skipped ./.openapi-generator-ignore (Skipped by supportingFiles options supplied by user.)
[main] INFO  o.o.codegen.TemplateManager - writing file ./.openapi-generator/VERSION
[main] INFO  o.o.codegen.TemplateManager - writing file ./.openapi-generator/FILES
################################################################################
# Thanks for using OpenAPI Generator.                                          #
# Please consider donation to help us maintain this project 🙏                 #
# https://opencollective.com/openapi_generator/donate                          #
################################################################################
Steps to reproduce

After generating the project, the initial build fails, since circe-generic (for auto-derivation) is not added to build.sbt (separate issue - it should probably be included, maybe with % Provided):

$ sbt compile
[info] compiling 5 Scala sources to <redacted>/target/scala-2.13/classes ...
[error] <redacted>/src/main/scala/com/acme/widgets/core/JsonSupport.scala:16:17: object generic is not a member of package io.circe
[error] import io.circe.generic.AutoDerivation
[error]                 ^
[error] <redacted>/src/main/scala/com/acme/widgets/core/JsonSupport.scala:19:46: not found: type AutoDerivation
[error] object JsonSupport extends SttpCirceApi with AutoDerivation with DateSerializers with AdditionalTypeSerializers {
[error]                                              ^
[error] <redacted>/src/main/scala/com/acme/widgets/api/DefaultApi.scala:38:23: could not find implicit value for evidence parameter of type io.circe.Decoder[com.acme.widgets.model.Widget]
[error]       .response(asJson[Widget])
[error]                       ^
[error] three errors found
[error] (Compile / compileIncremental) Compilation failed

After adding "io.circe" %% "circe-generic" % "0.14.1" to build.sbt, compilation fails again:

$  sbt compile
[info] welcome to sbt 1.6.1 (Ubuntu Java 17.0.14)
[info] loading global plugins from <redacted>/.sbt/1.0/plugins
[info] loading project definition from <redacted>/project
[info] loading settings for project scala-sttp-client from build.sbt ...
[info] set current project to openapi-client (in build file:<redacted>/)
[info] Executing in batch mode. For better performance use sbt's shell
[info] compiling 1 Scala source to <redacted>/target/scala-2.13/classes ...
[info] compiling 1 Scala source to <redacted>/target/scala-2.13/classes ...
[error] <redacted>/src/main/scala/com/acme/widgets/api/DefaultApi.scala:38:23: could not find implicit value for evidence parameter of type io.circe.Decoder[com.acme.widgets.model.Widget]
[error]       .response(asJson[Widget])
[error]                       ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 4 s, completed Apr 3, 2025, 3:01:20 PM

For enumerations defined as standalone models, decoder/encoder are generated in core.JsonSupport. These are not generated for enumerations defined inline.

Related issues/PRs

There is already a similar PR for the json4s implementation:

#17697

Suggest a fix

I'm hoping to submit a pull request shortly to address this. The missing encoder and decoder can be added to modules/openapi-generator/src/main/resources/scala-sttp/jsonSupport.mustache.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions