Repository navigation
Name inline union parameters so they reach the request - #180
Merged
Merged
Conversation
cubahno
force-pushed
the
ig/name-inline-union-params
branch
from
October 29, 2026 09:47
ff9c4bf to
97c2f93
Compare
cubahno
marked this pull request as ready for review
October 29, 2026 09:55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A query parameter whose schema is a union with two or more non-null variants (id | "null" | null, or a nested anyOf) was generated as an anonymous struct holding a json:"-" field.
That field only works because the parent type's generated MarshalJSON merges it back, and an anonymous struct can't have methods.
So it marshaled to {}, form encoding emitted no pairs, and the parameter was silently missing from the URL: no error, and the server returned an unfiltered result. Path and header parameters share the same code path.
What changes
generateParamsTypesgives a parameter schema a named type, with a generatedMarshalJSON, when it would otherwise be an anonymous struct with nameless fields. It reuses the needsMarshaler check that object properties already go through.The type is named
<Operation><Query|Path|Headers>_<Param>, e.g.ListWidgetsQuery_ParentID, the same pattern used for parameters with additionalProperties.The parameter field changes from an anonymous struct to that named type.
Code that built the old anonymous struct literal stops compiling, but that field never produced a value.
Parameters that collapse to a single type (asc | desc | null) are unchanged, and make generate changes no existing example.
New
examples/union/anyof-query-paramshas the reproduction spec from the issue and a test that the value reachesGetQuery()for both the nested and the flattened union.Fixes #177