Пример #1
0
        /// <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
                   ));
        }
Пример #2
0
        /// <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
                   ));
        }