openapi-generator icon indicating copy to clipboard operation
openapi-generator copied to clipboard

[BUG] [DART-DIO] enumUnknownDefaultCase config ignored with useEnumExtension configuration

Open ebetschart opened this issue 8 months ago • 0 comments

Bug Report Checklist

  • [x] Have you provided a full/minimal spec to reproduce the issue?
  • [x] Have you validated the input using an OpenAPI validator?
  • [x] Have you tested with the latest master to confirm the issue still exists?
  • [x] Have you searched for related issues/PRs?
  • [x] What's the actual output vs expected output?
Description

I use the dart-dio generator with config options:

useEnumExtension: 'true',
enumUnknownDefaultCase: 'true'

When the config option useEnumExtension is activated, the enumUnknownDefaultCase option is ignored and no enum case unknownDefaultOpenApi is generated.

openapi-generator version

I'm using version 7.13.0 (no regression).

OpenAPI declaration file content or url

Example with an enum:

openapi: 3.0.0

info:
  title: test
  version: 0.0.1

paths:
  /test:
    get:
      description: test
      responses:
        "200":
          description: test
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MyEnum"


components:
  schemas:
    MyEnum:
      type: integer
      x-enum-values:
        - identifier: case1
          numericValue: 1
        - identifier: case2
          numericValue: 2
      enum:
        - 1
        - 2

with both config options useEnumExtension and enumUnknownDefaultCase on we get:

java -jar openapi-generator-cli-7.14.0-20250602.083235-44.jar generate -i api.yaml -g dart-dio -o generate -p useEnumExtension=true,enumUnknownDefaultCase=true
class MyEnum extends EnumClass {

  @BuiltValueEnumConst(wireNumber: 1)
  static const MyEnum case1 = _$case1;
  @BuiltValueEnumConst(wireNumber: 2, fallback: true)
  static const MyEnum case2 = _$case2;

  static Serializer<MyEnum> get serializer => _$myEnumSerializer;

  const MyEnum._(String name): super(name);

  static BuiltSet<MyEnum> get values => _$values;
  static MyEnum valueOf(String name) => _$valueOf(name);
}

When only enumUnknownDefaultCase is active, the unknownDefaultOpenApi case is generated:

java -jar openapi-generator-cli-7.14.0-20250602.083235-44.jar generate -i api.yaml -g dart-dio -o generate -p enumUnknownDefaultCase=true
class MyEnum extends EnumClass {

  @BuiltValueEnumConst(wireNumber: 1)
  static const MyEnum number1 = _$number1;
  @BuiltValueEnumConst(wireNumber: 2)
  static const MyEnum number2 = _$number2;
  @BuiltValueEnumConst(wireNumber: 11184809, fallback: true)
  static const MyEnum unknownDefaultOpenApi = _$unknownDefaultOpenApi;

  static Serializer<MyEnum> get serializer => _$myEnumSerializer;

  const MyEnum._(String name): super(name);

  static BuiltSet<MyEnum> get values => _$values;
  static MyEnum valueOf(String name) => _$valueOf(name);
}

Expected generated enum contains both the named cases and the unknownDefault case:

class MyEnum extends EnumClass {

  @BuiltValueEnumConst(wireNumber: 1)
  static const MyEnum case1 = _$case1;
  @BuiltValueEnumConst(wireNumber: 2, fallback: true)
  static const MyEnum case2 = _$case2;
  @BuiltValueEnumConst(wireNumber: 11184809, fallback: true)
  static const MyEnum unknownDefaultOpenApi = _$unknownDefaultOpenApi;
  
  static Serializer<MyEnum> get serializer => _$myEnumSerializer;

  const MyEnum._(String name): super(name);

  static BuiltSet<MyEnum> get values => _$values;
  static MyEnum valueOf(String name) => _$valueOf(name);
}
Generation Details
  • Language: Dart
  • Generator: dart-dio
  • Version: 7.13.0
  • Generator options:
    • useEnumExtension: true,
    • enumUnknownDefaultCase: true
Steps to reproduce

Define an enum with x-enum-values. Use generator language dart-dio and activate options useEnumExtension, enumUnknownDefaultCase

IS: Enums are generated without unknown default case.

SHOULD: Enums are generated with Unknown default case and named cases.

ebetschart avatar Jun 13 '25 12:06 ebetschart