OpenAPITools / OpenAPITools/openapi-generator
[BUG] OpenAPI Generator Dart-Dio: Enum Discriminators in Discriminated Unions Cause Compilation Errors
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
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?
- [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
When using enum properties as discriminator fields in OpenAPI discriminated unions, the generated Dart code contains compilation errors:
- Incorrect discriminator assignment: The generator assigns enum values directly instead of string literals
- Missing string conversion: Enum discriminators are not properly converted to strings for comparison
- Type mismatch errors: Generated code expects string discriminators but receives enum values
openapi-generator version
OpenAPI generator version 7.12.0
OpenAPI declaration file content or url
# Problematic discriminated union using enum as discriminator
MerchantDetailsDto:
type: object
properties:
uuid:
type: string
format: uuid
merchantType:
$ref: '#/components/schemas/MerchantTypeEnum'
required:
- uuid
- merchantType
discriminator:
propertyName: merchantType
mapping:
TYPE_A: '#/components/schemas/MerchantDetailsTypeADto'
TYPE_B: '#/components/schemas/MerchantDetailsTypeBDto'
TYPE_C: '#/components/schemas/MerchantDetailsTypeCDto'
TYPE_D: '#/components/schemas/MerchantDetailsTypeDDto'
TYPE_E: '#/components/schemas/MerchantDetailsTypeEDto'
TYPE_F: '#/components/schemas/MerchantDetailsTypeFDto'
# Another problematic discriminated union
QrCodeDto:
type: object
properties:
type:
$ref: '#/components/schemas/QrCodeTypeEnum'
name:
type: string
code:
type: string
terminalId:
format: int64
type: integer
required:
- type
- code
- terminalId
discriminator:
propertyName: type
mapping:
STATIC_TYPE: '#/components/schemas/StaticQrCodeDto'
DYNAMIC_TYPE: '#/components/schemas/DynamicQrCodeDto'
# The enum definitions that cause the problem
MerchantTypeEnum:
type: string
enum:
- TYPE_A
- TYPE_B
- TYPE_C
- TYPE_D
- TYPE_E
- TYPE_F
QrCodeTypeEnum:
type: string
enum:
- DYNAMIC_TYPE
- STATIC_TYPE
Generation Details
Generator: dart-dio with built_value serialization
OpenAPI Generator Version: 7.12.0
Input Spec: merchants-v2.1.yaml (contains the problematic discriminated unions)
Output Directory: ../ (relative to config directory)
Package Name: merchant_app
Discriminator Behavior: legacyDiscriminatorBehavior: false (uses new discriminator logic)
Enum Handling: enumUnknownDefaultCase: true (allows unknown enum values)
Steps to reproduce
- Use an OpenAPI spec with discriminated union using enum discriminator
- Generate Dart code using dart-dio template
- Attempt to compile generated code
- Observe compilation errors related to discriminator field assignments
Suggest a fix
-
Fix the dart-dio Template Logic
The core issue is in the dart-dio template's discriminator handling. The template should:
Detect when discriminator properties are enum types (not just strings)
Generate proper enum conversion code instead of direct assignment
Handle null discriminator values gracefully -
Enhance Discriminator Property Type Detection
The generator should:
Parse the discriminator property's schema reference to determine if it's an enum
Extract the enum class name from the schema reference
Generate appropriate conversion logic based on the property type -
Add Configuration Option for Enum Discriminator Handling
Introduce a new configuration option:
additionalProperties:
enumDiscriminatorHandling: "auto" # or "manual", "legacy"
- Improve Error Messages and Validation
Add validation that:
Warns when enum discriminators are detected but not properly handled
Provides clear error messages about what needs to be fixed
Suggests configuration changes to resolve issues
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the dart-dio template's discriminator handling and the enum schemas in the supplied OpenAPI YAML. Generate code with version 7.12.0, legacyDiscriminatorBehavior disabled, and enumUnknownDefaultCase enabled, then compile the output to reproduce the errors. Done means generated Dart for enum discriminated unions compiles and handles discriminator values correctly.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, java, openapi
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100