feat(gen): add array element type discrimination for oneOf/anyOf#1589
Merged
ernado merged 1 commit intoogen-go:mainfrom Dec 1, 2025
Merged
feat(gen): add array element type discrimination for oneOf/anyOf#1589ernado merged 1 commit intoogen-go:mainfrom
ernado merged 1 commit intoogen-go:mainfrom
Conversation
05fe329 to
91cc056
Compare
Enable automatic discrimination between oneOf variants that have array fields with different element types (e.g., string[] vs integer[] vs boolean[]). This extends the type-based discrimination added in PR ogen-go#1584 to support cases where variants share the same field name with array types but differ in their element types. Implementation: - Add ArrayElementType and ArrayElementTypeID fields to UniqueFieldVariant - Add getArrayElementTypeInfo() to extract element type from array type IDs - Update validation to allow discrimination when array element types differ - Generate decoder code that peeks into arrays using d.Capture() and d.ArrIter() to check first element type without consuming Supported cases: - Basic primitives: string[] vs integer[] vs boolean[] - Object vs primitive: object[] vs string[] - Mixed: array type combined with unique field discrimination Limitations (future work): - Nested arrays (array[array[string]] vs array[array[integer]]) - Complex object arrays (User[] vs Product[] with same object type)
91cc056 to
8b4a188
Compare
ernado
approved these changes
Dec 1, 2025
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.
Summary
Adds array element type discrimination for oneOf/anyOf schemas, enabling automatic variant selection when variants differ by their array element types (e.g.,
string[]vsinteger[]).This feature is conservative - it only enables array element discrimination when variants also have at least one unique field by name, ensuring reliable fallback when the array field is missing or empty.
Changes
ArrayElementTypeandArrayElementTypeIDtoUniqueFieldVariantIR metadatagetArrayElementTypeInfo()to extract element types from array type IDsd.Capture()andd.ArrIter()Example Schema
Before: "type-based discrimination with same jxType" error
After: Generates working decoder that peeks at first element
Generated Code
Testing
_testdata/positive/array_element_discrimination.jsonLimitations (Future Work)
array[array[string]]vsarray[array[integer]]) - requires recursive peeking🤖 Generated with Claude Code