func parseInputObjectTypeDefinition(parser *Parser) (*ast.InputObjectDefinition, error) { start := parser.Token.Start _, err := expectKeyWord(parser, "input") if err != nil { return nil, err } name, err := parseName(parser) if err != nil { return nil, err } iInputValueDefinitions, err := any(parser, lexer.TokenKind[lexer.BRACE_L], parseInputValueDef, lexer.TokenKind[lexer.BRACE_R]) if err != nil { return nil, err } fields := []*ast.InputValueDefinition{} for _, iInputValueDefinition := range iInputValueDefinitions { if iInputValueDefinition != nil { fields = append(fields, iInputValueDefinition.(*ast.InputValueDefinition)) } } return ast.NewInputObjectDefinition(&ast.InputObjectDefinition{ Name: name, Loc: loc(parser, start), Fields: fields, }), nil }
func TestSchemaParser_SimpleInputObject(t *testing.T) { body := ` input Hello { world: String }` astDoc := parse(t, body) expected := ast.NewDocument(&ast.Document{ Loc: testLoc(1, 32), Definitions: []ast.Node{ ast.NewInputObjectDefinition(&ast.InputObjectDefinition{ Loc: testLoc(1, 32), Name: ast.NewName(&ast.Name{ Value: "Hello", Loc: testLoc(7, 12), }), Fields: []*ast.InputValueDefinition{ ast.NewInputValueDefinition(&ast.InputValueDefinition{ Loc: testLoc(17, 30), Name: ast.NewName(&ast.Name{ Value: "world", Loc: testLoc(17, 22), }), Type: ast.NewNamed(&ast.Named{ Loc: testLoc(24, 30), Name: ast.NewName(&ast.Name{ Value: "String", Loc: testLoc(24, 30), }), }), DefaultValue: nil, }), }, }), }, }) if !reflect.DeepEqual(astDoc, expected) { t.Fatalf("unexpected document, expected: %v, got: %v", expected, astDoc) } }