fix(codegen): extend discriminated union detection to support 'type' field#3
Conversation
…field Previously isDiscriminatedUnion() only checked for 'method' field discriminators (JSON-RPC style). Now also detects 'type' field discriminators used by ThreadItem (14 variants), ResponseItem (11), UserInput (5), EventMsg (75), and 20+ other oneOf types. Generated pattern for type-unions: struct with Type string + json.RawMessage Data, custom UnmarshalJSON/MarshalJSON, type constants, and typed As*() getter methods for each variant.
PR Review: fix(codegen): extend discriminated union detectionSummaryThis PR extends the code generator to handle type-discriminated unions (discriminated by a Changes
Verification
FindingsNo critical issues found. Minor observations (non-blocking):
VERDICT: LGTM |
golangci-lint-action@v6 pulled golangci-lint v1.x built with Go 1.24, which fails against go.mod targeting Go 1.25.5. Action v9 uses golangci-lint v2.x which supports newer Go versions.
Triage UpdateReview verdict: LGTM — no critical issues. CI fix: golangci-lint-action upgraded v6→v9 (v6 pulled lint v1.x built with Go 1.24, incompatible with our Go 1.25.5). Also fixed staticcheck S1039 (unnecessary CI status: All checks passing. Merging. |
Summary
isDiscriminatedUnion()to detect bothmethodandtypefield discriminators (was onlymethod)discriminatorField()helper that returns the discriminator field namegenTypeDiscriminatedUnion()generates: struct withType string+json.RawMessage Data, customUnmarshalJSON/MarshalJSON, type constants, and typedAs*()getter methodstypeas discriminatorTest plan
go build ./...passesgo test ./...passes