/// <summary> /// Parses an object type definition. /// <see cref="ObjectTypeDefinitionNode" />: /// Description? /// type Name ImplementsInterfaces? Directives[isConstant=true]? FieldsDefinition? /// </summary> /// <param name="context">The parser context.</param> private ObjectTypeDefinitionNode ParseObjectTypeDefinition( ParserContext context) { SyntaxToken start = context.Current; StringValueNode description = ParseDescription(context); context.ExpectTypeKeyword(); NameNode name = ParseName(context); List <NamedTypeNode> interfaces = ParseImplementsInterfaces(context); List <DirectiveNode> directives = ParseDirectives(context, true); List <FieldDefinitionNode> fields = ParseFieldsDefinition(context); Location location = context.CreateLocation(start); return(new ObjectTypeDefinitionNode ( location, name, description, directives, interfaces, fields )); }
private ObjectTypeExtensionNode ParseObjectTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectTypeKeyword(); NameNode name = context.ParseName(); List <NamedTypeNode> interfaces = ParseImplementsInterfaces(context); List <DirectiveNode> directives = ParseDirectives(context, true); List <FieldDefinitionNode> fields = ParseFieldsDefinition(context); Location location = context.CreateLocation(start); if (interfaces.Count == 0 && directives.Count == 0 && fields.Count == 0) { throw context.Unexpected(start); } return(new ObjectTypeExtensionNode ( location, name, directives, interfaces, fields )); }