/// <summary> /// Parses a schema definition. /// <see cref="SchemaDefinitionNode" />: /// schema Directives[isConstant:true]? { OperationTypeDefinition+ } /// </summary> /// <param name="context">The parser context.</param> private SchemaDefinitionNode ParseSchemaDefinition( ParserContext context) { SyntaxToken start = context.Current; context.SkipDescription(); context.ExpectSchemaKeyword(); List <DirectiveNode> directives = ParseDirectives(context, true); List <OperationTypeDefinitionNode> operationTypeDefinitions = ParseMany(context, TokenKind.LeftBrace, ParseOperationTypeDefinition, TokenKind.RightBrace); Location location = context.CreateLocation(start); return(new SchemaDefinitionNode ( location, directives, operationTypeDefinitions )); }
/// <summary> /// Parse schema definition extension. /// <see cref="SchemaExtensionNode" />: /// * - extend schema Directives[Const]? { OperationTypeDefinition+ } /// * - extend schema Directives[Const] /// </summary> /// <param name="context">The parser context.</param> private SchemaExtensionNode ParseSchemaExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectSchemaKeyword(); List <DirectiveNode> directives = ParseDirectives(context, true); List <OperationTypeDefinitionNode> operationTypeDefinitions = ParseOperationTypeDefinitions(context); if (directives.Count == 0 && operationTypeDefinitions.Count == 0) { throw context.Unexpected(start); } Location location = context.CreateLocation(start); return(new SchemaExtensionNode ( location, directives, operationTypeDefinitions )); }