MCPcopy Index your code
hub / github.com/github/copilot-sdk / findGoDiscriminator

Function findGoDiscriminator

scripts/codegen/go.ts:636–680  ·  view source on GitHub ↗

* Find a literal-valued discriminator property shared by all anyOf variants.

(
    variants: JSONSchema7[],
    ctx: GoCodegenCtx,
    unionTypeName: string
)

Source from the content-addressed store, hash-verified

634 * Find a literal-valued discriminator property shared by all anyOf variants.
635 */
636function findGoDiscriminator(
637 variants: JSONSchema7[],
638 ctx: GoCodegenCtx,
639 unionTypeName: string
640): GoDiscriminatorInfo | null {
641 if (variants.length === 0) return null;
642 const firstVariant = resolveGoUnionMember(variants[0], ctx.definitions);
643 if (!firstVariant.properties) return null;
644
645 for (const [propName, propSchema] of Object.entries(firstVariant.properties)) {
646 if (typeof propSchema !== "object") continue;
647 const firstDiscriminatorValues = goDiscriminatorValues(propSchema as JSONSchema7, ctx);
648 if (!firstDiscriminatorValues || firstDiscriminatorValues.values.length === 0) continue;
649
650 const mapping = new Map<GoDiscriminatorValue, GoDiscriminatedUnionVariant[]>();
651 const unionVariants: GoDiscriminatedUnionVariant[] = [];
652 let valid = true;
653 for (const variantSource of variants) {
654 const variant = resolveGoUnionMember(variantSource, ctx.definitions);
655 if (!variant.properties) { valid = false; break; }
656 if (!(variant.required || []).includes(propName)) { valid = false; break; }
657 const vp = variant.properties[propName];
658 if (typeof vp !== "object") { valid = false; break; }
659 const discriminatorValues = goDiscriminatorValues(vp as JSONSchema7, ctx);
660 if (!discriminatorValues || discriminatorValues.values.length === 0 || discriminatorValues.kind !== firstDiscriminatorValues.kind) { valid = false; break; }
661 const dedupedValues = [...new Set(discriminatorValues.values)];
662 if (discriminatorValues.kind === "boolean" && dedupedValues.length > 1) { valid = false; break; }
663 const unionVariant = {
664 schema: variant,
665 typeName: goDiscriminatedUnionVariantTypeName(unionTypeName, dedupedValues[0], variantSource, variant, ctx),
666 discriminatorValues: dedupedValues,
667 };
668 unionVariants.push(unionVariant);
669 for (const discriminatorValue of dedupedValues) {
670 const existing = mapping.get(discriminatorValue) ?? [];
671 existing.push(unionVariant);
672 mapping.set(discriminatorValue, existing);
673 }
674 }
675 if (valid && mapping.size > 0 && unionVariants.length === variants.length) {
676 return { property: propName, valueKind: firstDiscriminatorValues.kind, mapping, variants: unionVariants };
677 }
678 }
679 return null;
680}
681
682function findGoRequiredFieldDiscriminator(
683 variants: JSONSchema7[],

Calls 6

resolveGoUnionMemberFunction · 0.85
goDiscriminatorValuesFunction · 0.85
pushMethod · 0.45
getMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…