diff --git a/src/parser/ast.schema.yaml b/src/parser/ast.schema.yaml index 3961a56..42972a9 100644 --- a/src/parser/ast.schema.yaml +++ b/src/parser/ast.schema.yaml @@ -37,6 +37,9 @@ $defs: - $ref: "#/$defs/PolymorphicTypeDefinition" - $ref: "#/$defs/PolymorphicEnumLoopBuildDefinition" - $ref: "#/$defs/PolymorphicPassThroughDefinition" + - $ref: "#/$defs/PolymorphicTreeEnumDefinition" + - $ref: "#/$defs/PolymorphicLeafEnumDefinition" + - $ref: "#/$defs/PolymorphicEnumInnerBuildDefinition" # Struct StructNodeDefinition: @@ -606,4 +609,89 @@ $defs: - kind - with required: - - node_production \ No newline at end of file + - node_production + + # Polymorphic Tree Enum + PolymorphicTreeEnumDefinition: + type: object + additionalProperties: false + properties: + polymorphic_tree_enum: + type: object + additionalProperties: false + properties: + kind: + type: string + rules: + type: array + items: + type: string + required: + - kind + - rules + required: + - polymorphic_tree_enum + + # Polymorphic Leaf Enum + PolymorphicLeafEnumDefinition: + type: object + additionalProperties: false + properties: + polymorphic_leaf_enum: + type: object + additionalProperties: false + properties: + kind: + type: string + rules: + type: array + items: + type: string + required: + - kind + - rules + required: + - polymorphic_leaf_enum + + # Polymorphic Enum Inner Build + PolymorphicEnumInnerBuildDefinition: + type: object + additionalProperties: false + properties: + polymorphic_enum_inner_build: + type: object + additionalProperties: false + properties: + members: + type: array + items: + $ref: "#/$defs/PolymorphicEnumInnerBuildMember" + rules: + type: array + items: + type: string + required: + - members + - rules + required: + - polymorphic_enum_inner_build + + PolymorphicEnumInnerBuildMember: + type: object + oneOf: + - type: string + - $ref: "#/$defs/PolymorphicEnumInnerBuildAdvancedMember" + + PolymorphicEnumInnerBuildAdvancedMember: + type: object + patternProperties: + "^([A-Z][a-z]*)*$": + type: object + additionalProperties: false + properties: + kind: + type: string + required: + - kind + minProperties: 1 + maxProperties: 1