diff --git a/generate/generate.go b/generate/generate.go index f8d8472..f1d8b1c 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -51,15 +51,19 @@ type argument struct { GraphQLName string } -func fromASTArg(arg *ast.VariableDefinition, schema *ast.Schema) argument { +func fromASTArg(arg *ast.VariableDefinition, schema *ast.Schema) (argument, error) { graphQLName := arg.Variable firstRest := strings.SplitN(graphQLName, "", 2) goName := strings.ToLower(firstRest[0]) + firstRest[1] + goType, err := typeForInputType(arg.Type, schema) + if err != nil { + return argument{}, err + } return argument{ GraphQLName: graphQLName, GoName: goName, - GoType: typeForInputType(arg.Type, schema), - } + GoType: goType, + }, nil } func reverse(slice []string) { @@ -100,7 +104,11 @@ func fromASTOperation(op *ast.OperationDefinition, schema *ast.Schema) (operatio args := make([]argument, len(op.VariableDefinitions)) for i, arg := range op.VariableDefinitions { - args[i] = fromASTArg(arg, schema) + var err error + args[i], err = fromASTArg(arg, schema) + if err != nil { + return operation{}, err + } } typ, err := typeForOperation(op, schema) diff --git a/generate/types.go b/generate/types.go index 3614f64..ea45dba 100644 --- a/generate/types.go +++ b/generate/types.go @@ -13,14 +13,14 @@ func typeForOperation(operation *ast.OperationDefinition, schema *ast.Schema) (s return builder.String(), err } -func typeForInputType(typ *ast.Type, schema *ast.Schema) string { +func typeForInputType(typ *ast.Type, schema *ast.Schema) (string, error) { var builder strings.Builder // TODO: handle non-scalar types (by passing ...something... as the // SelectionSet?) - writeType(&builder, typ, nil, schema) + err := writeType(&builder, typ, nil, schema) - return builder.String() + return builder.String(), err } func writeSelectionSetStruct(builder *strings.Builder, selectionSet ast.SelectionSet, schema *ast.Schema) error { @@ -46,7 +46,10 @@ func writeSelectionSetStruct(builder *strings.Builder, selectionSet ast.Selectio // but empirically it might not. return fmt.Errorf("undefined selection %v", selection) } - writeType(builder, selection.Definition.Type, selection.SelectionSet, schema) + err := writeType(builder, selection.Definition.Type, selection.SelectionSet, schema) + if err != nil { + return err + } if jsonName != goName { builder.WriteString("`json:\"")