Skip to content

[rust] fix: make enumUnknownDefaultCase catch unknown enum values - #25292

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
teovillanueva:fix/rust-enum-unknown-default-case
Nov 4, 2026
Merged

wing328 merged 2 commits into
OpenAPITools:masterfrom
teovillanueva:fix/rust-enum-unknown-default-case

Conversation

@teovillanueva

@teovillanueva teovillanueva commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #25291
Related: #25271 also changes rust/model.mustache (oneOf with an enum discriminator), in a different section.

With enumUnknownDefaultCase=true the rust client adds an UnknownDefaultOpenApi variant to each enum without #[serde(other)]. So only the literal "unknown_default_open_api" / 11184809 maps to it, and any other value outside the spec still fails to deserialize.

Changes:

  • rust/model.mustache: add #[serde(other)] to the injected unknown variant (the last enumVars entry, only when enumUnknownDefaultCase is set). This covers schema-level and inline property enums, for both string enums (Deserialize) and integer enums (Deserialize_repr; serde_repr supports #[serde(other)]).
  • Serialization does not change: the variant still serializes as "unknown_default_open_api" / 11184809.
  • Output without the option does not change.

Not covered: the rust-server and rust-axum generators. They use separate templates.

Testing:

  • New RustClientCodegenTest#testEnumUnknownDefaultCaseUsesSerdeOther with src/test/resources/3_0/rust/enum-unknown-default-case.yaml. The test fails without the template change.
  • I generated a crate from that spec with the option on and ran a cargo test against it: unknown string, schema-level and integer values deserialize to UnknownDefaultOpenApi, and known values are unchanged.
  • No existing rust sample uses enumUnknownDefaultCase, so regenerating the samples changed nothing.

PR checklist

  • Read the contribution guidelines.
  • Run the following to build the project and update samples:
    ./mvnw clean package || exit
    ./bin/generate-samples.sh ./bin/configs/*.yaml || exit
    ./bin/utils/export_docs_generators.sh || exit
    
    (For Windows users, please run the script in WSL)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
    Regenerated ./bin/configs/rust-reqwest-*.yaml and ./bin/configs/rust-hyper*.yaml (32 configs): no changes. No generator options were changed, so the docs export is not needed.
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

cc @frol @farcaller @richardwhiuk @paladinzh @jacob-pro @dsteeley


Summary by cubic

Makes enumUnknownDefaultCase work as documented in the Rust client: unknown enum values now deserialize to the UnknownDefaultOpenApi variant instead of erroring.

Previously the variant only matched its serialized literal ("unknown_default_open_api" / 11184809), so any other out-of-spec value failed deserialization. The injected variant now carries #[serde(other)], which applies to schema-level and inline enums for both string and integer types. Serialization behavior and output without the option are unchanged.

  • Affects the rust generator only; rust-server and rust-axum use separate templates.

Written for commit 0b11126. Summary will update on new commits.

View guided diff

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 3 files

Reply with feedback, questions, or to request a fix.

View guided diff | Re-trigger cubic

@wing328 wing328 added this to the 7.28.0 milestone Nov 4, 2026
@wing328
wing328 merged commit 860e53f into OpenAPITools:master Nov 4, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][RUST] enumUnknownDefaultCase does not make unknown enum values deserialize

2 participants