From 8d870400695a3644b325418ed187cf6779c3951a Mon Sep 17 00:00:00 2001 From: Ben Kraft Date: Thu, 2 Apr 2020 18:35:04 -0700 Subject: [PATCH] refactor typegen to explicitly handle kinds --- generate/types.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/generate/types.go b/generate/types.go index 1a6ab0c..dbb1bb3 100644 --- a/generate/types.go +++ b/generate/types.go @@ -96,15 +96,21 @@ func (builder *typeBuilder) writeType(typ *ast.Type, selectionSet ast.SelectionS builder.WriteString("*") } - if selectionSet != nil { + typedef := builder.schema.Types[typ.Name()] + switch typedef.Kind { + case ast.Object, ast.InputObject: return builder.writeSelectionSetStruct(selectionSet) + case ast.Scalar, ast.Enum: + goName := graphQLNameToGoName[typ.Name()] + // TODO(benkraft): Handle custom scalars and enums. + if goName == "" { + return fmt.Errorf("unknown scalar name: %s", typ.Name()) + } + builder.WriteString(goName) + return nil + case ast.Union, ast.Interface: + return fmt.Errorf("not implemented: %v", typedef.Kind) + default: + return fmt.Errorf("unexpected kind: %v", typedef.Kind) } - - // TODO: handle enums better. (do unions need special handling?) - goName := graphQLNameToGoName[typ.Name()] - if goName == "" { - return fmt.Errorf("unknown scalar name: %s", typ.Name()) - } - builder.WriteString(goName) - return nil }