(
variants: JSONSchema7[],
ctx: GoCodegenCtx,
unionTypeName: string
)
| 680 | } |
| 681 | |
| 682 | function findGoRequiredFieldDiscriminator( |
| 683 | variants: JSONSchema7[], |
| 684 | ctx: GoCodegenCtx, |
| 685 | unionTypeName: string |
| 686 | ): GoRequiredFieldDiscriminatorInfo | null { |
| 687 | if (variants.length === 0) return null; |
| 688 | |
| 689 | const objectVariants = variants.map((variantSource) => ({ |
| 690 | source: variantSource, |
| 691 | schema: goObjectUnionMemberSchema(variantSource, ctx), |
| 692 | })); |
| 693 | if (objectVariants.some((variant) => variant.schema === undefined)) return null; |
| 694 | |
| 695 | const requiredSets = objectVariants.map((variant) => new Set(variant.schema!.required || [])); |
| 696 | const propertySets = objectVariants.map((variant) => new Set(Object.keys(variant.schema!.properties || {}))); |
| 697 | const unionVariants: GoDiscriminatedUnionVariant[] = []; |
| 698 | const seenTypeNames = new Set<string>(); |
| 699 | for (const [index, variant] of objectVariants.entries()) { |
| 700 | const required = requiredSets[index]; |
| 701 | if (required.size === 0) return null; |
| 702 | |
| 703 | const uniqueRequired = [...required] |
| 704 | .filter((propName) => !propertySets.some((peerProperties, peerIndex) => peerIndex !== index && peerProperties.has(propName))) |
| 705 | .sort(compareGoFieldNames); |
| 706 | if (uniqueRequired.length === 0) return null; |
| 707 | |
| 708 | const typeName = goDiscriminatedUnionVariantTypeName(unionTypeName, uniqueRequired[0], variant.source, variant.schema!, ctx); |
| 709 | if (seenTypeNames.has(typeName)) return null; |
| 710 | seenTypeNames.add(typeName); |
| 711 | unionVariants.push({ |
| 712 | schema: variant.schema!, |
| 713 | typeName, |
| 714 | discriminatorValues: uniqueRequired, |
| 715 | }); |
| 716 | } |
| 717 | |
| 718 | return { variants: unionVariants }; |
| 719 | } |
| 720 | |
| 721 | /** |
| 722 | * Get or create a Go enum type, deduplicating by type name (not by value set). |
no test coverage detected
searching dependent graphs…