diff --git a/codegen/args.go b/codegen/args.go index 130439dcb2..8ae1e097b3 100644 --- a/codegen/args.go +++ b/codegen/args.go @@ -5,6 +5,7 @@ import ( "go/types" "strings" + "github.com/99designs/gqlgen/codegen/config" "github.com/99designs/gqlgen/codegen/templates" "github.com/pkg/errors" "github.com/vektah/gqlparser/ast" @@ -15,26 +16,46 @@ type ArgSet struct { FuncDecl string } +type FieldArgument struct { + *ast.ArgumentDefinition + TypeReference *config.TypeReference + VarName string // The name of the var in go + Object *Object // A link back to the parent object + Default interface{} // The default value + Directives []*Directive + Value interface{} // value set in Data +} + +func (f *FieldArgument) Stream() bool { + return f.Object != nil && f.Object.Stream +} + func (b *builder) buildArg(obj *Object, arg *ast.ArgumentDefinition) (*FieldArgument, error) { + def := b.Schema.Types[arg.Type.Name()] + if !def.IsInputType() { + return nil, errors.Errorf( + "cannot use %s as argument %s because %s is not a valid input type", + arg.Type.String(), + arg.Name, + def.Kind, + ) + } + + tr, err := b.Binder.TypeReference(arg.Type) + if err != nil { + return nil, err + } + argDirs, err := b.getDirectives(arg.Directives) if err != nil { return nil, err } newArg := FieldArgument{ - GQLName: arg.Name, - TypeReference: b.NamedTypes.getType(arg.Type), - Object: obj, - GoVarName: templates.ToGoPrivate(arg.Name), - Directives: argDirs, - } - - if !newArg.TypeReference.Definition.GQLDefinition.IsInputType() { - return nil, errors.Errorf( - "cannot use %s as argument %s because %s is not a valid input type", - newArg.Definition.GQLDefinition.Name, - arg.Name, - newArg.TypeReference.Definition.GQLDefinition.Kind, - ) + ArgumentDefinition: arg, + TypeReference: tr, + Object: obj, + VarName: templates.ToGoPrivate(arg.Name), + Directives: argDirs, } if arg.DefaultValue != nil { @@ -54,8 +75,8 @@ nextArg: for j := 0; j < params.Len(); j++ { param := params.At(j) for _, oldArg := range field.Args { - if strings.EqualFold(oldArg.GQLName, param.Name()) { - oldArg.TypeReference.GoType = param.Type() + if strings.EqualFold(oldArg.Name, param.Name()) { + oldArg.TypeReference.GO = param.Type() newArgs = append(newArgs, oldArg) continue nextArg } diff --git a/codegen/args.gotpl b/codegen/args.gotpl index 254ee6fcf4..0a789aa722 100644 --- a/codegen/args.gotpl +++ b/codegen/args.gotpl @@ -1,49 +1,46 @@ {{ range $name, $args := .Args }} func (e *executableSchema){{ $name }}(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} {{- range $i, $arg := . }} - var arg{{$i}} {{$arg.GoType | ref }} - if tmp, ok := rawArgs[{{$arg.GQLName|quote}}]; ok { + var arg{{$i}} {{ $arg.TypeReference.GO | ref}} + if tmp, ok := rawArgs[{{$arg.Name|quote}}]; ok { {{- if $arg.Directives }} - argm{{$i}}, err := chainFieldMiddleware([]graphql.FieldMiddleware{ - {{- range $directive := $arg.Directives }} - func(ctx context.Context, n graphql.Resolver) (res interface{}, err error) { - {{- range $dArg := $directive.Args }} - {{- if and $dArg.IsPtr ( notNil "Value" $dArg ) }} - {{ $dArg.GoVarName }} := {{ $dArg.Value | dump }} + getArg0 := func(ctx context.Context) (interface{}, error) { return unmarshal{{$arg.TypeReference.GQL.Name}}2{{ $arg.TypeReference.GO | ts }}(tmp) } + + {{- range $i, $directive := $arg.Directives }} + getArg{{add $i 1}} := func(ctx context.Context) (res interface{}, err error) { + {{- range $dArg := $directive.Args }} + {{- if and $dArg.TypeReference.IsPtr ( notNil "Value" $dArg ) }} + {{ $dArg.VarName }} := {{ $dArg.Value | dump }} + {{- end }} {{- end }} - {{- end }} + n := getArg{{$i}} return e.directives.{{$directive.Name|ucFirst}}({{$directive.ResolveArgs "tmp" "n" }}) - }, - {{- end }} - }...)(ctx, func(ctx2 context.Context) (interface{}, error) { - var err error - {{$arg.Unmarshal (print "arg" $i) "tmp" }} - if err != nil { - return nil, err } - return arg{{ $i }}, nil - }) + {{- end }} + + tmp, err = getArg{{$arg.Directives|len}}(ctx) if err != nil { return nil, err } - if data, ok := argm{{$i}}.({{$arg.GoType | ref }}); ok { + if data, ok := tmp.({{ $arg.TypeReference.GO }}) ; ok { arg{{$i}} = data } else { - return nil, errors.New("expect {{$arg.GoType | ref }}") + return nil, fmt.Errorf(`unexpected type %T from directive, should be {{ $arg.TypeReference.GO }}`, tmp) } {{- else }} - var err error - {{ $arg.Unmarshal (print "arg" $i) "tmp" }} + arg{{$i}}, err = unmarshal{{$arg.TypeReference.GQL.Name}}2{{ $arg.TypeReference.GO | ts }}(tmp) if err != nil { return nil, err } {{- end }} - {{- if eq $arg.Definition.GQLDefinition.Kind "INPUT_OBJECT" }} - {{ $arg.Middleware (print "arg" $i) (print "arg" $i) }} - {{- end }} + + {{/*{{- if eq $arg.TypeReference.Definition.Kind "INPUT_OBJECT" }}*/}} + {{/*{{ $arg.Middleware (print "arg" $i) (print "arg" $i) }}*/}} + {{/*{{- end }}*/}} } - args[{{$arg.GQLName|quote}}] = arg{{$i}} + args[{{$arg.Name|quote}}] = arg{{$i}} {{- end }} return args, nil } diff --git a/codegen/build_typedef.go b/codegen/build_typedef.go index 989ced9480..bf234bd5ff 100644 --- a/codegen/build_typedef.go +++ b/codegen/build_typedef.go @@ -83,7 +83,7 @@ func (b *builder) buildTypeDef(schemaType *ast.Definition) (*TypeDefinition, err // Special case to reference generated unmarshal functions if !hasUnmarshal { - t.Unmarshaler = types.NewFunc(0, b.Config.Exec.Pkg(), "Unmarshal"+schemaType.Name, nil) + t.Unmarshaler = types.NewFunc(0, b.Config.Exec.Pkg(), "unmarshalInput"+schemaType.Name, nil) } return t, nil diff --git a/codegen/config/binder.go b/codegen/config/binder.go index 3878f4701f..69bd20ea3c 100644 --- a/codegen/config/binder.go +++ b/codegen/config/binder.go @@ -14,19 +14,22 @@ import ( // Binder connects graphql types to golang types using static analysis type Binder struct { - pkgs []*packages.Package - types TypeMap + pkgs []*packages.Package + schema *ast.Schema + cfg *Config + References []*TypeReference } -func (c *Config) NewBinder() (*Binder, error) { +func (c *Config) NewBinder(s *ast.Schema) (*Binder, error) { pkgs, err := packages.Load(&packages.Config{Mode: packages.LoadTypes | packages.LoadSyntax}, c.Models.ReferencedPackages()...) if err != nil { return nil, err } return &Binder{ - pkgs: pkgs, - types: c.Models, + pkgs: pkgs, + schema: s, + cfg: c, }, nil } @@ -55,7 +58,7 @@ var MapType = types.NewMap(types.Typ[types.String], types.NewInterfaceType(nil, var InterfaceType = types.NewInterfaceType(nil, nil) func (b *Binder) FindUserObject(name string) (types.Type, error) { - userEntry, ok := b.types[name] + userEntry, ok := b.cfg.Models[name] if !ok { return nil, fmt.Errorf(name + " not found") } @@ -118,17 +121,58 @@ func normalizeVendor(pkg string) string { return modifiers + parts[len(parts)-1] } -func (b *Binder) FindBackingType(schemaType *ast.Type) (types.Type, error) { +// TypeReference is used by args and field types. The Definition can refer to both input and output types. +type TypeReference struct { + Definition *ast.Definition + GQL *ast.Type + GO types.Type + Marshaler *types.Func // When using external marshalling functions this will point to the Marshal function + Unmarshaler *types.Func // When using external marshalling functions this will point to the Unmarshal function +} + +func (t TypeReference) IsPtr() bool { + _, isPtr := t.GO.(*types.Pointer) + return isPtr +} + +func (t TypeReference) IsSlice() bool { + _, isSlice := t.GO.(*types.Slice) + return isSlice +} + +func (t TypeReference) IsNamed() bool { + _, isSlice := t.GO.(*types.Named) + return isSlice +} + +func (b *Binder) PushRef(ret *TypeReference) { + b.References = append(b.References, ret) +} + +func (b *Binder) TypeReference(schemaType *ast.Type) (ret *TypeReference, err error) { var pkgName, typeName string + def := b.schema.Types[schemaType.Name()] + defer func() { + if err == nil && ret != nil { + b.PushRef(ret) + } + }() - if userEntry, ok := b.types[schemaType.Name()]; ok && userEntry.Model != "" { - // special case for maps + if userEntry, ok := b.cfg.Models[schemaType.Name()]; ok && userEntry.Model != "" { if userEntry.Model == "map[string]interface{}" { - return MapType, nil + return &TypeReference{ + Definition: def, + GQL: schemaType, + GO: MapType, + }, nil } if userEntry.Model == "interface{}" { - return InterfaceType, nil + return &TypeReference{ + Definition: def, + GQL: schemaType, + GO: InterfaceType, + }, nil } pkgName, typeName = code.PkgAndType(userEntry.Model) @@ -141,12 +185,42 @@ func (b *Binder) FindBackingType(schemaType *ast.Type) (types.Type, error) { typeName = "String" } - t, err := b.FindType(pkgName, typeName) + ref := &TypeReference{ + Definition: def, + GQL: schemaType, + } + + obj, err := b.FindObject(pkgName, typeName) if err != nil { return nil, err } - return b.CopyModifiersFromAst(schemaType, true, t), nil + if fun, isFunc := obj.(*types.Func); isFunc { + ref.GO = fun.Type().(*types.Signature).Params().At(0).Type() + ref.Marshaler = fun + ref.Unmarshaler = types.NewFunc(0, fun.Pkg(), "Unmarshal"+typeName, nil) + } else { + ref.GO = obj.Type() + } + + if namedType, ok := ref.GO.(*types.Named); ok && ref.Unmarshaler == nil { + hasUnmarshal := false + for i := 0; i < namedType.NumMethods(); i++ { + switch namedType.Method(i).Name() { + case "UnmarshalGQL": + hasUnmarshal = true + } + } + + // Special case to reference generated unmarshal functions + if !hasUnmarshal { + ref.Unmarshaler = types.NewFunc(0, b.cfg.Exec.Pkg(), "unmarshalInput"+schemaType.Name(), nil) + } + } + + ref.GO = b.CopyModifiersFromAst(schemaType, true, ref.GO) + + return ref, nil } func (b *Binder) CopyModifiersFromAst(t *ast.Type, usePtr bool, base types.Type) types.Type { diff --git a/codegen/data.go b/codegen/data.go index 1d0c6660da..eabd43f606 100644 --- a/codegen/data.go +++ b/codegen/data.go @@ -13,13 +13,14 @@ import ( // Data is a unified model of the code to be generated. Plugins may modify this structure to do things like implement // resolvers or directives automatically (eg grpc, validation) type Data struct { - Config *config.Config - Schema *ast.Schema - SchemaStr map[string]string - Directives map[string]*Directive - Objects Objects - Inputs Objects - Interfaces map[string]*Interface + Config *config.Config + Schema *ast.Schema + SchemaStr map[string]string + Directives map[string]*Directive + Objects Objects + Inputs Objects + Interfaces map[string]*Interface + ReferencedTypes map[string]*config.TypeReference QueryRoot *Object MutationRoot *Object @@ -53,7 +54,7 @@ func BuildData(cfg *config.Config) (*Data, error) { cfg.InjectBuiltins(b.Schema) - b.Binder, err = b.Config.NewBinder() + b.Binder, err = b.Config.NewBinder(b.Schema) if err != nil { return nil, err } @@ -120,6 +121,11 @@ func BuildData(cfg *config.Config) (*Data, error) { return nil, err } + s.ReferencedTypes, err = b.buildTypes() + if err != nil { + return nil, err + } + sort.Slice(s.Objects, func(i, j int) bool { return s.Objects[i].Definition.Name < s.Objects[j].Definition.Name }) @@ -141,6 +147,10 @@ func (b *builder) injectIntrospectionRoots(s *Data) error { if err != nil { return errors.Wrap(err, "unable to find root Type introspection type") } + stringRef, err := b.Binder.TypeReference(ast.NonNullNamedType("String", nil)) + if err != nil { + return errors.Wrap(err, "unable to find root string type reference") + } obj.Fields = append(obj.Fields, &Field{ TypeReference: &TypeReference{b.NamedTypes["__Type"], types.NewPointer(typeType.Type()), ast.NamedType("__Schema", nil)}, @@ -150,13 +160,11 @@ func (b *builder) injectIntrospectionRoots(s *Data) error { GoFieldName: "introspectType", Args: []*FieldArgument{ { - GQLName: "name", - TypeReference: &TypeReference{ - b.NamedTypes["String"], - types.Typ[types.String], - ast.NamedType("String", nil), + ArgumentDefinition: &ast.ArgumentDefinition{ + Name: "name", }, - Object: &Object{}, + TypeReference: stringRef, + Object: &Object{}, }, }, Object: obj, diff --git a/codegen/directive.go b/codegen/directive.go index 5897c68774..d13ae4fee5 100644 --- a/codegen/directive.go +++ b/codegen/directive.go @@ -28,15 +28,20 @@ func (b *builder) buildDirectives() (map[string]*Directive, error) { var args []*FieldArgument for _, arg := range dir.Arguments { + def := b.Schema.Types[arg.Type.Name()] + if !def.IsInputType() { + return nil, errors.Errorf("%s cannot be used as argument of directive %s(%s) only input and scalar types are allowed", arg.Type, dir.Name, arg.Name) + } - newArg := &FieldArgument{ - GQLName: arg.Name, - TypeReference: b.NamedTypes.getType(arg.Type), - GoVarName: templates.ToGoPrivate(arg.Name), + tr, err := b.Binder.TypeReference(arg.Type) + if err != nil { + return nil, err } - if !newArg.TypeReference.Definition.GQLDefinition.IsInputType() { - return nil, errors.Errorf("%s cannot be used as argument of directive %s(%s) only input and scalar types are allowed", arg.Type, dir.Name, arg.Name) + newArg := &FieldArgument{ + ArgumentDefinition: arg, + TypeReference: tr, + VarName: templates.ToGoPrivate(arg.Name), } if arg.DefaultValue != nil { @@ -77,14 +82,14 @@ func (b *builder) getDirectives(list ast.DirectiveList) ([]*Directive, error) { var args []*FieldArgument for _, a := range def.Args { value := a.Default - if argValue, ok := argValues[a.GQLName]; ok { + if argValue, ok := argValues[a.Name]; ok { value = argValue } args = append(args, &FieldArgument{ - GQLName: a.GQLName, - Value: value, - GoVarName: a.GoVarName, - TypeReference: a.TypeReference, + ArgumentDefinition: a.ArgumentDefinition, + Value: value, + VarName: a.VarName, + TypeReference: a.TypeReference, }) } dirs[i] = &Directive{ @@ -109,7 +114,7 @@ func (d *Directive) CallArgs() string { args := []string{"ctx", "obj", "n"} for _, arg := range d.Args { - args = append(args, "args["+strconv.Quote(arg.GQLName)+"].("+templates.CurrentImports.LookupType(arg.GoType)+")") + args = append(args, "args["+strconv.Quote(arg.Name)+"].("+templates.CurrentImports.LookupType(arg.TypeReference.GO)+")") } return strings.Join(args, ", ") @@ -119,8 +124,8 @@ func (d *Directive) ResolveArgs(obj string, next string) string { args := []string{"ctx", obj, next} for _, arg := range d.Args { - dArg := "&" + arg.GoVarName - if !arg.IsPtr() { + dArg := "&" + arg.VarName + if !arg.TypeReference.IsPtr() { if arg.Value != nil { dArg = templates.Dump(arg.Value) } else { @@ -140,7 +145,7 @@ func (d *Directive) Declaration() string { res := ucFirst(d.Name) + " func(ctx context.Context, obj interface{}, next graphql.Resolver" for _, arg := range d.Args { - res += fmt.Sprintf(", %s %s", arg.GoVarName, templates.CurrentImports.LookupType(arg.GoType)) + res += fmt.Sprintf(", %s %s", arg.Name, templates.CurrentImports.LookupType(arg.TypeReference.GO)) } res += ") (res interface{}, err error)" diff --git a/codegen/schema_test.go b/codegen/errors_test.go similarity index 78% rename from codegen/schema_test.go rename to codegen/errors_test.go index 7cf7dce3fc..2cd16b593b 100644 --- a/codegen/schema_test.go +++ b/codegen/errors_test.go @@ -10,7 +10,7 @@ import ( func TestTypeUnionAsInput(t *testing.T) { err := generate("inputunion", `testdata/unioninput.graphqls`) - require.EqualError(t, err, "unable to build object definition: Query.addBookmark: cannot use Bookmarkable as argument b because UNION is not a valid input type") + require.EqualError(t, err, "unable to build object definition: Query.addBookmark: cannot use Bookmarkable! as argument b because UNION is not a valid input type") } func TestTypeInInput(t *testing.T) { @@ -25,8 +25,9 @@ func generate(name string, schemaFilename string) error { Exec: config.PackageConfig{Filename: "gen/" + name + "/exec.go"}, Model: config.PackageConfig{Filename: "gen/" + name + "/model.go"}, Models: map[string]config.TypeMapEntry{ - "Item": {Model: "map[string]interface{}"}, - "Bookmarkable": {Model: "interface{}"}, + "Item": {Model: "map[string]interface{}"}, + "Bookmarkable": {Model: "interface{}"}, + "BookmarkableInput": {Model: "interface{}"}, }, }) diff --git a/codegen/field.go b/codegen/field.go index 1cf30f2785..413ea3eb54 100644 --- a/codegen/field.go +++ b/codegen/field.go @@ -297,7 +297,7 @@ func (f *Field) ShortResolverDeclaration() string { res += fmt.Sprintf(", obj *%s", templates.CurrentImports.LookupType(f.Object.Type)) } for _, arg := range f.Args { - res += fmt.Sprintf(", %s %s", arg.GoVarName, templates.CurrentImports.LookupType(arg.GoType)) + res += fmt.Sprintf(", %s %s", arg.VarName, templates.CurrentImports.LookupType(arg.TypeReference.GO)) } result := templates.CurrentImports.LookupType(f.GoType) @@ -312,7 +312,7 @@ func (f *Field) ShortResolverDeclaration() string { func (f *Field) ComplexitySignature() string { res := fmt.Sprintf("func(childComplexity int") for _, arg := range f.Args { - res += fmt.Sprintf(", %s %s", arg.GoVarName, templates.CurrentImports.LookupType(arg.GoType)) + res += fmt.Sprintf(", %s %s", arg.VarName, templates.CurrentImports.LookupType(arg.TypeReference.GO)) } res += ") int" return res @@ -321,7 +321,7 @@ func (f *Field) ComplexitySignature() string { func (f *Field) ComplexityArgs() string { var args []string for _, arg := range f.Args { - args = append(args, "args["+strconv.Quote(arg.GQLName)+"].("+templates.CurrentImports.LookupType(arg.GoType)+")") + args = append(args, "args["+strconv.Quote(arg.Name)+"].("+templates.CurrentImports.LookupType(arg.TypeReference.GO)+")") } return strings.Join(args, ", ") @@ -343,7 +343,7 @@ func (f *Field) CallArgs() string { } for _, arg := range f.Args { - args = append(args, "args["+strconv.Quote(arg.GQLName)+"].("+templates.CurrentImports.LookupType(arg.GoType)+")") + args = append(args, "args["+strconv.Quote(arg.Name)+"].("+templates.CurrentImports.LookupType(arg.TypeReference.GO)+")") } return strings.Join(args, ", ") diff --git a/codegen/fieldarg.go b/codegen/fieldarg.go deleted file mode 100644 index d85feb3dd6..0000000000 --- a/codegen/fieldarg.go +++ /dev/null @@ -1,16 +0,0 @@ -package codegen - -type FieldArgument struct { - *TypeReference - - GQLName string // The name of the argument in graphql - GoVarName string // The name of the var in go - Object *Object // A link back to the parent object - Default interface{} // The default value - Directives []*Directive - Value interface{} // value set in Data -} - -func (f *FieldArgument) Stream() bool { - return f.Object != nil && f.Object.Stream -} diff --git a/codegen/generate.go b/codegen/generate.go index eafa3f8743..a32e329e60 100644 --- a/codegen/generate.go +++ b/codegen/generate.go @@ -10,6 +10,6 @@ func GenerateCode(data *Data) error { Filename: data.Config.Exec.Filename, Data: data, RegionTags: true, - GeneratedHeader: true, + GeneratedHeader: false, }) } diff --git a/codegen/input.gotpl b/codegen/input.gotpl index 1e8e01fca6..c09c949fa0 100644 --- a/codegen/input.gotpl +++ b/codegen/input.gotpl @@ -1,6 +1,6 @@ {{- range $input := .Inputs }} {{- if not .HasUnmarshal }} - func Unmarshal{{ .Name }}(v interface{}) ({{.Type | ref}}, error) { + func unmarshalInput{{ .Name }}(v interface{}) ({{.Type | ref}}, error) { var it {{.Type | ref}} var asMap = v.(map[string]interface{}) {{ range $field := .Fields}} @@ -65,8 +65,8 @@ func(ctx context.Context, n graphql.Resolver) (res interface{}, err error) { {{- if $directive.Args }} {{- range $arg := $directive.Args }} - {{- if and $arg.IsPtr ( notNil "Value" $arg ) }} - {{ $arg.GoVarName }} := {{ $arg.Value | dump }} + {{- if and $arg.TypeReference.IsPtr ( notNil "Value" $arg ) }} + {{ $arg.VarName }} := {{ $arg.Value | dump }} {{- end }} {{- end }} {{- end }} diff --git a/codegen/schema.go b/codegen/schema.go deleted file mode 100644 index c4d47b51af..0000000000 --- a/codegen/schema.go +++ /dev/null @@ -1 +0,0 @@ -package codegen diff --git a/codegen/templates/import_test.go b/codegen/templates/import_test.go index a8dd39d4bf..437bf7438b 100644 --- a/codegen/templates/import_test.go +++ b/codegen/templates/import_test.go @@ -65,26 +65,6 @@ bar1 "github.com/99designs/gqlgen/codegen/templates/testdata/b/bar" ) }) - t.Run("reserved collisions on path will panic", func(t *testing.T) { - a := Imports{destDir: wd} - - a.Reserve(aBar) - - require.Panics(t, func() { - a.Reserve(aBar) - }) - }) - - t.Run("reserved collisions on alias will panic", func(t *testing.T) { - a := Imports{destDir: wd} - - a.Reserve(aBar) - - require.Panics(t, func() { - a.Reserve(bBar) - }) - }) - t.Run("aliased imports will not collide", func(t *testing.T) { a := Imports{destDir: wd} diff --git a/codegen/templates/templates.go b/codegen/templates/templates.go index 50099b60f9..9cf65eeed8 100644 --- a/codegen/templates/templates.go +++ b/codegen/templates/templates.go @@ -129,6 +129,7 @@ func Funcs() template.FuncMap { "toCamel": ToCamel, "dump": Dump, "ref": ref, + "ts": TypeIdentifier, "call": Call, "prefixLines": prefixLines, "notNil": notNil, @@ -136,6 +137,9 @@ func Funcs() template.FuncMap { "lookupImport": CurrentImports.Lookup, "go": ToGo, "goPrivate": ToGoPrivate, + "add": func(a, b int) int { + return a + b + }, "render": func(filename string, tpldata interface{}) (*bytes.Buffer, error) { return render(resolveName(filename, 0), tpldata) }, @@ -169,6 +173,43 @@ func ref(p types.Type) string { return CurrentImports.LookupType(p) } +var pkgReplacer = strings.NewReplacer( + "/", "ᚋ", + ".", "ᚗ", + "-", "ᚑ", +) + +func TypeIdentifier(t types.Type) string { + res := "" + for { + switch it := t.(type) { + case *types.Pointer: + t.Underlying() + res += "ᚖ" + t = it.Elem() + case *types.Slice: + res += "ᚕ" + t = it.Elem() + case *types.Named: + res += pkgReplacer.Replace(it.Obj().Pkg().Path()) + res += "ᚐ" + res += it.Obj().Name() + return res + case *types.Basic: + res += it.Name() + return res + case *types.Map: + res += "map" + return res + case *types.Interface: + res += "interface" + return res + default: + panic(fmt.Errorf("unexpected type %T", it)) + } + } +} + func Call(p *types.Func) string { pkg := CurrentImports.Lookup(p.Pkg().Path()) diff --git a/codegen/testserver/generated.go b/codegen/testserver/generated.go index a6bc9122d3..3feab2595c 100644 --- a/codegen/testserver/generated.go +++ b/codegen/testserver/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package testserver import ( @@ -97,7 +95,7 @@ type ComplexityRoot struct { Query struct { InvalidIdentifier func(childComplexity int) int Collision func(childComplexity int) int - MapInput func(childComplexity int, input *map[string]interface{}) int + MapInput func(childComplexity int, input map[string]interface{}) int Recursive func(childComplexity int, input *RecursiveInputSlice) int NestedInputs func(childComplexity int, input [][]*OuterInput) int NestedOutputs func(childComplexity int) int @@ -141,7 +139,7 @@ type ModelMethodsResolver interface { type QueryResolver interface { InvalidIdentifier(ctx context.Context) (*invalid_packagename.InvalidIdentifier, error) Collision(ctx context.Context) (*introspection1.It, error) - MapInput(ctx context.Context, input *map[string]interface{}) (*bool, error) + MapInput(ctx context.Context, input map[string]interface{}) (*bool, error) Recursive(ctx context.Context, input *RecursiveInputSlice) (*bool, error) NestedInputs(ctx context.Context, input [][]*OuterInput) (*bool, error) NestedOutputs(ctx context.Context) ([][]*OuterObject, error) @@ -315,7 +313,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Query.MapInput(childComplexity, args["input"].(*map[string]interface{})), true + return e.complexity.Query.MapInput(childComplexity, args["input"].(map[string]interface{})), true case "Query.recursive": if e.complexity.Query.Recursive == nil { @@ -862,664 +860,537 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) dir_length_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 int if tmp, ok := rawArgs["min"]; ok { - var err error - arg0, err = graphql.UnmarshalInt(tmp) + arg0, err = unmarshalInt2int(tmp) if err != nil { return nil, err } + } args["min"] = arg0 var arg1 *int if tmp, ok := rawArgs["max"]; ok { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg1 = &ptr1 - } - + arg1, err = unmarshalInt2ᚖint(tmp) if err != nil { return nil, err } + } args["max"] = arg1 var arg2 string if tmp, ok := rawArgs["message"]; ok { - var err error - arg2, err = graphql.UnmarshalString(tmp) + arg2, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["message"] = arg2 return args, nil } func (e *executableSchema) dir_range_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *int if tmp, ok := rawArgs["min"]; ok { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalInt2ᚖint(tmp) if err != nil { return nil, err } + } args["min"] = arg0 var arg1 *int if tmp, ok := rawArgs["max"]; ok { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg1 = &ptr1 - } - + arg1, err = unmarshalInt2ᚖint(tmp) if err != nil { return nil, err } + } args["max"] = arg1 var arg2 *string if tmp, ok := rawArgs["message"]; ok { - var err error - var ptr1 string - if tmp != nil { - ptr1, err = graphql.UnmarshalString(tmp) - arg2 = &ptr1 - } - + arg2, err = unmarshalString2ᚖstring(tmp) if err != nil { return nil, err } + } args["message"] = arg2 return args, nil } func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_Query_directiveArg_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["arg"]; ok { - argm0, err := chainFieldMiddleware([]graphql.FieldMiddleware{ - func(ctx context.Context, n graphql.Resolver) (res interface{}, err error) { - max := 255 - return e.directives.Length(ctx, tmp, n, 1, &max, "invalid length") - }, - }...)(ctx, func(ctx2 context.Context) (interface{}, error) { - var err error - arg0, err = graphql.UnmarshalString(tmp) - if err != nil { - return nil, err - } - return arg0, nil - }) + getArg0 := func(ctx context.Context) (interface{}, error) { return unmarshalString2string(tmp) } + getArg1 := func(ctx context.Context) (res interface{}, err error) { + max := 255 + n := getArg0 + return e.directives.Length(ctx, tmp, n, 1, &max, "invalid length") + } + + tmp, err = getArg1(ctx) if err != nil { return nil, err } - if data, ok := argm0.(string); ok { + if data, ok := tmp.(string); ok { arg0 = data } else { - return nil, errors.New("expect string") + return nil, fmt.Errorf(`unexpected type %T from directive, should be string`, tmp) } + } args["arg"] = arg0 return args, nil } func (e *executableSchema) field_Query_directiveInputNullable_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *InputDirectives if tmp, ok := rawArgs["arg"]; ok { - var err error - var ptr1 InputDirectives - if tmp != nil { - ptr1, err = UnmarshalInputDirectives(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalInputDirectives2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐInputDirectives(tmp) if err != nil { return nil, err } - if arg0 != nil { - var err error - arg0, err = e.InputDirectivesMiddleware(ctx, arg0) - if err != nil { - return nil, err - } - } } args["arg"] = arg0 return args, nil } func (e *executableSchema) field_Query_directiveInput_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 InputDirectives if tmp, ok := rawArgs["arg"]; ok { - var err error - arg0, err = UnmarshalInputDirectives(tmp) + arg0, err = unmarshalInputDirectives2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐInputDirectives(tmp) if err != nil { return nil, err } - mInputDirectives1, err := e.InputDirectivesMiddleware(ctx, &arg0) - if err != nil { - return nil, err - } - arg0 = *mInputDirectives1 } args["arg"] = arg0 return args, nil } func (e *executableSchema) field_Query_directiveNullableArg_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *int if tmp, ok := rawArgs["arg"]; ok { - argm0, err := chainFieldMiddleware([]graphql.FieldMiddleware{ - func(ctx context.Context, n graphql.Resolver) (res interface{}, err error) { - min := 0 - return e.directives.Range(ctx, tmp, n, &min, nil, nil) - }, - }...)(ctx, func(ctx2 context.Context) (interface{}, error) { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg0 = &ptr1 - } + getArg0 := func(ctx context.Context) (interface{}, error) { return unmarshalInt2ᚖint(tmp) } + getArg1 := func(ctx context.Context) (res interface{}, err error) { + min := 0 + n := getArg0 + return e.directives.Range(ctx, tmp, n, &min, nil, nil) + } - if err != nil { - return nil, err - } - return arg0, nil - }) + tmp, err = getArg1(ctx) if err != nil { return nil, err } - if data, ok := argm0.(*int); ok { + if data, ok := tmp.(*int); ok { arg0 = data } else { - return nil, errors.New("expect *int") + return nil, fmt.Errorf(`unexpected type %T from directive, should be *int`, tmp) } + } args["arg"] = arg0 var arg1 *int if tmp, ok := rawArgs["arg2"]; ok { - argm1, err := chainFieldMiddleware([]graphql.FieldMiddleware{ - func(ctx context.Context, n graphql.Resolver) (res interface{}, err error) { - min := 0 - return e.directives.Range(ctx, tmp, n, &min, nil, nil) - }, - }...)(ctx, func(ctx2 context.Context) (interface{}, error) { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg1 = &ptr1 - } + getArg0 := func(ctx context.Context) (interface{}, error) { return unmarshalInt2ᚖint(tmp) } + getArg1 := func(ctx context.Context) (res interface{}, err error) { + min := 0 + n := getArg0 + return e.directives.Range(ctx, tmp, n, &min, nil, nil) + } - if err != nil { - return nil, err - } - return arg1, nil - }) + tmp, err = getArg1(ctx) if err != nil { return nil, err } - if data, ok := argm1.(*int); ok { + if data, ok := tmp.(*int); ok { arg1 = data } else { - return nil, errors.New("expect *int") + return nil, fmt.Errorf(`unexpected type %T from directive, should be *int`, tmp) } + } args["arg2"] = arg1 return args, nil } func (e *executableSchema) field_Query_keywordArgs_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["break"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["break"] = arg0 var arg1 string if tmp, ok := rawArgs["default"]; ok { - var err error - arg1, err = graphql.UnmarshalString(tmp) + arg1, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["default"] = arg1 var arg2 string if tmp, ok := rawArgs["func"]; ok { - var err error - arg2, err = graphql.UnmarshalString(tmp) + arg2, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["func"] = arg2 var arg3 string if tmp, ok := rawArgs["interface"]; ok { - var err error - arg3, err = graphql.UnmarshalString(tmp) + arg3, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["interface"] = arg3 var arg4 string if tmp, ok := rawArgs["select"]; ok { - var err error - arg4, err = graphql.UnmarshalString(tmp) + arg4, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["select"] = arg4 var arg5 string if tmp, ok := rawArgs["case"]; ok { - var err error - arg5, err = graphql.UnmarshalString(tmp) + arg5, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["case"] = arg5 var arg6 string if tmp, ok := rawArgs["defer"]; ok { - var err error - arg6, err = graphql.UnmarshalString(tmp) + arg6, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["defer"] = arg6 var arg7 string if tmp, ok := rawArgs["go"]; ok { - var err error - arg7, err = graphql.UnmarshalString(tmp) + arg7, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["go"] = arg7 var arg8 string if tmp, ok := rawArgs["map"]; ok { - var err error - arg8, err = graphql.UnmarshalString(tmp) + arg8, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["map"] = arg8 var arg9 string if tmp, ok := rawArgs["struct"]; ok { - var err error - arg9, err = graphql.UnmarshalString(tmp) + arg9, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["struct"] = arg9 var arg10 string if tmp, ok := rawArgs["chan"]; ok { - var err error - arg10, err = graphql.UnmarshalString(tmp) + arg10, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["chan"] = arg10 var arg11 string if tmp, ok := rawArgs["else"]; ok { - var err error - arg11, err = graphql.UnmarshalString(tmp) + arg11, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["else"] = arg11 var arg12 string if tmp, ok := rawArgs["goto"]; ok { - var err error - arg12, err = graphql.UnmarshalString(tmp) + arg12, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["goto"] = arg12 var arg13 string if tmp, ok := rawArgs["package"]; ok { - var err error - arg13, err = graphql.UnmarshalString(tmp) + arg13, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["package"] = arg13 var arg14 string if tmp, ok := rawArgs["switch"]; ok { - var err error - arg14, err = graphql.UnmarshalString(tmp) + arg14, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["switch"] = arg14 var arg15 string if tmp, ok := rawArgs["const"]; ok { - var err error - arg15, err = graphql.UnmarshalString(tmp) + arg15, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["const"] = arg15 var arg16 string if tmp, ok := rawArgs["fallthrough"]; ok { - var err error - arg16, err = graphql.UnmarshalString(tmp) + arg16, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["fallthrough"] = arg16 var arg17 string if tmp, ok := rawArgs["if"]; ok { - var err error - arg17, err = graphql.UnmarshalString(tmp) + arg17, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["if"] = arg17 var arg18 string if tmp, ok := rawArgs["range"]; ok { - var err error - arg18, err = graphql.UnmarshalString(tmp) + arg18, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["range"] = arg18 var arg19 string if tmp, ok := rawArgs["type"]; ok { - var err error - arg19, err = graphql.UnmarshalString(tmp) + arg19, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["type"] = arg19 var arg20 string if tmp, ok := rawArgs["continue"]; ok { - var err error - arg20, err = graphql.UnmarshalString(tmp) + arg20, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["continue"] = arg20 var arg21 string if tmp, ok := rawArgs["for"]; ok { - var err error - arg21, err = graphql.UnmarshalString(tmp) + arg21, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["for"] = arg21 var arg22 string if tmp, ok := rawArgs["import"]; ok { - var err error - arg22, err = graphql.UnmarshalString(tmp) + arg22, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["import"] = arg22 var arg23 string if tmp, ok := rawArgs["return"]; ok { - var err error - arg23, err = graphql.UnmarshalString(tmp) + arg23, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["return"] = arg23 var arg24 string if tmp, ok := rawArgs["var"]; ok { - var err error - arg24, err = graphql.UnmarshalString(tmp) + arg24, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["var"] = arg24 return args, nil } func (e *executableSchema) field_Query_keywords_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *Keywords if tmp, ok := rawArgs["input"]; ok { - var err error - var ptr1 Keywords - if tmp != nil { - ptr1, err = UnmarshalKeywords(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalKeywords2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐKeywords(tmp) if err != nil { return nil, err } - if arg0 != nil { - var err error - arg0, err = e.KeywordsMiddleware(ctx, arg0) - if err != nil { - return nil, err - } - } } args["input"] = arg0 return args, nil } func (e *executableSchema) field_Query_mapInput_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} - var arg0 *map[string]interface{} + var arg0 map[string]interface{} if tmp, ok := rawArgs["input"]; ok { - var err error - var ptr1 map[string]interface{} - if tmp != nil { - ptr1 = tmp.(map[string]interface{}) - arg0 = &ptr1 - } - + arg0, err = unmarshalChanges2map(tmp) if err != nil { return nil, err } - if arg0 != nil { - var err error - arg0, err = e.ChangesMiddleware(ctx, arg0) - if err != nil { - return nil, err - } - } } args["input"] = arg0 return args, nil } func (e *executableSchema) field_Query_nestedInputs_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 [][]*OuterInput if tmp, ok := rawArgs["input"]; ok { - var err error - var rawIf1 []interface{} - if tmp != nil { - if tmp1, ok := tmp.([]interface{}); ok { - rawIf1 = tmp1 - } else { - rawIf1 = []interface{}{tmp} - } - } - arg0 = make([][]*OuterInput, len(rawIf1)) - for idx1 := range rawIf1 { - var rawIf2 []interface{} - if rawIf1[idx1] != nil { - if tmp1, ok := rawIf1[idx1].([]interface{}); ok { - rawIf2 = tmp1 - } else { - rawIf2 = []interface{}{rawIf1[idx1]} - } - } - arg0[idx1] = make([]*OuterInput, len(rawIf2)) - for idx2 := range rawIf2 { - var ptr3 OuterInput - if rawIf2[idx2] != nil { - ptr3, err = UnmarshalOuterInput(rawIf2[idx2]) - arg0[idx1][idx2] = &ptr3 - } - } - } + arg0, err = unmarshalOuterInput2ᚕᚕᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(tmp) if err != nil { return nil, err } - for idx1 := range arg0 { - for idx2 := range arg0[idx1] { - if arg0[idx1][idx2] != nil { - var err error - arg0[idx1][idx2], err = e.OuterInputMiddleware(ctx, arg0[idx1][idx2]) - if err != nil { - return nil, err - } - } - } - } } args["input"] = arg0 return args, nil } func (e *executableSchema) field_Query_nullableArg_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *int if tmp, ok := rawArgs["arg"]; ok { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalInt2ᚖint(tmp) if err != nil { return nil, err } + } args["arg"] = arg0 return args, nil } func (e *executableSchema) field_Query_recursive_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *RecursiveInputSlice if tmp, ok := rawArgs["input"]; ok { - var err error - var ptr1 RecursiveInputSlice - if tmp != nil { - ptr1, err = UnmarshalRecursiveInputSlice(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalRecursiveInputSlice2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐRecursiveInputSlice(tmp) if err != nil { return nil, err } - if arg0 != nil { - var err error - arg0, err = e.RecursiveInputSliceMiddleware(ctx, arg0) - if err != nil { - return nil, err - } - } } args["input"] = arg0 return args, nil } func (e *executableSchema) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 int if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalInt(tmp) + arg0, err = unmarshalInt2int(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -2034,7 +1905,7 @@ func (ec *executionContext) _Query_mapInput(ctx context.Context, field graphql.C ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx) resTmp := ec.FieldMiddleware(ctx, nil, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().MapInput(rctx, args["input"].(*map[string]interface{})) + return ec.resolvers.Query().MapInput(rctx, args["input"].(map[string]interface{})) }) if resTmp == nil { return graphql.Null @@ -4112,7 +3983,7 @@ func (e *executableSchema) ChangesMiddleware(ctx context.Context, obj *map[strin return obj, nil } -func UnmarshalInnerDirectives(v interface{}) (InnerDirectives, error) { +func unmarshalInputInnerDirectives(v interface{}) (InnerDirectives, error) { var it InnerDirectives var asMap = v.(map[string]interface{}) @@ -4154,7 +4025,7 @@ func (e *executableSchema) InnerDirectivesMiddleware(ctx context.Context, obj *I return obj, nil } -func UnmarshalInnerInput(v interface{}) (InnerInput, error) { +func unmarshalInputInnerInput(v interface{}) (InnerInput, error) { var it InnerInput var asMap = v.(map[string]interface{}) @@ -4177,7 +4048,7 @@ func (e *executableSchema) InnerInputMiddleware(ctx context.Context, obj *InnerI return obj, nil } -func UnmarshalInputDirectives(v interface{}) (InputDirectives, error) { +func unmarshalInputInputDirectives(v interface{}) (InputDirectives, error) { var it InputDirectives var asMap = v.(map[string]interface{}) @@ -4191,7 +4062,7 @@ func UnmarshalInputDirectives(v interface{}) (InputDirectives, error) { } case "inner": var err error - it.Inner, err = UnmarshalInnerDirectives(v) + it.Inner, err = unmarshalInputInnerDirectives(v) if err != nil { return it, err } @@ -4199,7 +4070,7 @@ func UnmarshalInputDirectives(v interface{}) (InputDirectives, error) { var err error var ptr1 InnerDirectives if v != nil { - ptr1, err = UnmarshalInnerDirectives(v) + ptr1, err = unmarshalInputInnerDirectives(v) it.InnerNullable = &ptr1 } @@ -4250,7 +4121,7 @@ func (e *executableSchema) InputDirectivesMiddleware(ctx context.Context, obj *I return obj, nil } -func UnmarshalKeywords(v interface{}) (Keywords, error) { +func unmarshalInputKeywords(v interface{}) (Keywords, error) { var it Keywords var asMap = v.(map[string]interface{}) @@ -4417,7 +4288,7 @@ func (e *executableSchema) KeywordsMiddleware(ctx context.Context, obj *Keywords return obj, nil } -func UnmarshalOuterInput(v interface{}) (OuterInput, error) { +func unmarshalInputOuterInput(v interface{}) (OuterInput, error) { var it OuterInput var asMap = v.(map[string]interface{}) @@ -4425,7 +4296,7 @@ func UnmarshalOuterInput(v interface{}) (OuterInput, error) { switch k { case "inner": var err error - it.Inner, err = UnmarshalInnerInput(v) + it.Inner, err = unmarshalInputInnerInput(v) if err != nil { return it, err } @@ -4445,7 +4316,7 @@ func (e *executableSchema) OuterInputMiddleware(ctx context.Context, obj *OuterI return obj, nil } -func UnmarshalRecursiveInputSlice(v interface{}) (RecursiveInputSlice, error) { +func unmarshalInputRecursiveInputSlice(v interface{}) (RecursiveInputSlice, error) { var it RecursiveInputSlice var asMap = v.(map[string]interface{}) @@ -4463,7 +4334,7 @@ func UnmarshalRecursiveInputSlice(v interface{}) (RecursiveInputSlice, error) { } it.Self = make([]RecursiveInputSlice, len(rawIf1)) for idx1 := range rawIf1 { - it.Self[idx1], err = UnmarshalRecursiveInputSlice(rawIf1[idx1]) + it.Self[idx1], err = unmarshalInputRecursiveInputSlice(rawIf1[idx1]) } if err != nil { return it, err @@ -5290,3 +5161,112 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalInputDirectives2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐInputDirectives(v interface{}) (*InputDirectives, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalInputDirectives2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐInputDirectives(v) + return &res, err +} +func unmarshalKeywords2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐKeywords(v interface{}) (*Keywords, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalKeywords2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐKeywords(v) + return &res, err +} +func unmarshalOuterInput2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(v interface{}) (*OuterInput, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalOuterInput2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(v) + return &res, err +} +func unmarshalRecursiveInputSlice2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐRecursiveInputSlice(v interface{}) (*RecursiveInputSlice, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalRecursiveInputSlice2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐRecursiveInputSlice(v) + return &res, err +} +func unmarshalInt2ᚖint(v interface{}) (*int, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalInt2int(v) + return &res, err +} +func unmarshalString2ᚖstring(v interface{}) (*string, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalString2string(v) + return &res, err +} +func unmarshalOuterInput2ᚕᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(v interface{}) ([]*OuterInput, error) { + var vSlice []interface{} + if v != nil { + if tmp1, ok := v.([]interface{}); ok { + vSlice = tmp1 + } else { + vSlice = []interface{}{v} + } + } + var err error + res := make([]*OuterInput, len(vSlice)) + for i := range vSlice { + res[i], err = unmarshalOuterInput2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(vSlice[i]) + if err != nil { + return nil, err + } + } + return res, nil +} +func unmarshalOuterInput2ᚕᚕᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(v interface{}) ([][]*OuterInput, error) { + var vSlice []interface{} + if v != nil { + if tmp1, ok := v.([]interface{}); ok { + vSlice = tmp1 + } else { + vSlice = []interface{}{v} + } + } + var err error + res := make([][]*OuterInput, len(vSlice)) + for i := range vSlice { + res[i], err = unmarshalOuterInput2ᚕᚖgithubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(vSlice[i]) + if err != nil { + return nil, err + } + } + return res, nil +} +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalInputDirectives2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐInputDirectives(v interface{}) (InputDirectives, error) { + return unmarshalInputInputDirectives(v) +} +func unmarshalKeywords2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐKeywords(v interface{}) (Keywords, error) { + return unmarshalInputKeywords(v) +} +func unmarshalOuterInput2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐOuterInput(v interface{}) (OuterInput, error) { + return unmarshalInputOuterInput(v) +} +func unmarshalRecursiveInputSlice2githubᚗcomᚋ99designsᚋgqlgenᚋcodegenᚋtestserverᚐRecursiveInputSlice(v interface{}) (RecursiveInputSlice, error) { + return unmarshalInputRecursiveInputSlice(v) +} +func unmarshalInt2int(v interface{}) (int, error) { + return graphql.UnmarshalInt(v) +} +func unmarshalChanges2map(v interface{}) (map[string]interface{}, error) { + return v.(map[string]interface{}), nil +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/codegen/testserver/resolver.go b/codegen/testserver/resolver.go index 9e0bf4b3d6..3aecb553fa 100644 --- a/codegen/testserver/resolver.go +++ b/codegen/testserver/resolver.go @@ -47,7 +47,7 @@ func (r *queryResolver) InvalidIdentifier(ctx context.Context) (*invalid_package func (r *queryResolver) Collision(ctx context.Context) (*introspection1.It, error) { panic("not implemented") } -func (r *queryResolver) MapInput(ctx context.Context, input *map[string]interface{}) (*bool, error) { +func (r *queryResolver) MapInput(ctx context.Context, input map[string]interface{}) (*bool, error) { panic("not implemented") } func (r *queryResolver) Recursive(ctx context.Context, input *RecursiveInputSlice) (*bool, error) { diff --git a/codegen/type.go b/codegen/type.go new file mode 100644 index 0000000000..a650405b53 --- /dev/null +++ b/codegen/type.go @@ -0,0 +1,38 @@ +package codegen + +import ( + "go/types" + + "github.com/99designs/gqlgen/codegen/config" +) + +func (b *builder) buildTypes() (map[string]*config.TypeReference, error) { + ret := map[string]*config.TypeReference{} + + for _, ref := range b.Binder.References { + for { + ret[ref.GO.String()+ref.GQL.Name()] = ref + + if p, isPtr := ref.GO.(*types.Pointer); isPtr { + ref = &config.TypeReference{ + GO: p.Elem(), + GQL: ref.GQL, + Definition: ref.Definition, + Unmarshaler: ref.Unmarshaler, + Marshaler: ref.Marshaler, + } + } else if s, isSlice := ref.GO.(*types.Slice); isSlice { + ref = &config.TypeReference{ + GO: s.Elem(), + GQL: ref.GQL, + Definition: ref.Definition, + Unmarshaler: ref.Unmarshaler, + Marshaler: ref.Marshaler, + } + } else { + break + } + } + } + return ret, nil +} diff --git a/codegen/type.gotpl b/codegen/type.gotpl new file mode 100644 index 0000000000..59466f0deb --- /dev/null +++ b/codegen/type.gotpl @@ -0,0 +1,38 @@ +{{- range $type := .ReferencedTypes }} + {{- if $type.Definition.IsInputType }} + func unmarshal{{ $type.Definition.Name }}2{{ $type.GO | ts }}(v interface{}) ({{ $type.GO | ref }}, error) { + {{- if $type.IsPtr }} + if v == nil { return nil, nil } + res, err := unmarshal{{ $type.Definition.Name }}2{{ $type.GO.Elem | ts }}(v) + return &res, err + {{- else if $type.IsSlice }} + var vSlice []interface{} + if v != nil { + if tmp1, ok := v.([]interface{}); ok { + vSlice = tmp1 + } else { + vSlice = []interface{}{ v } + } + } + var err error + res := make([]{{$type.GO.Elem | ref}}, len(vSlice)) + for i := range vSlice { + res[i], err = unmarshal{{ $type.Definition.Name }}2{{ $type.GO.Elem | ts }}(vSlice[i]) + if err != nil { + return nil, err + } + } + return res, nil + {{- else }} + {{- if $type.Unmarshaler }} + return {{ $type.Unmarshaler | call }}(v) + {{- else if eq ($type.GO | ref) "map[string]interface{}" }} + return v.(map[string]interface{}), nil + {{- else -}} + var res {{ $type.GO | ref }} + return res, res.UnmarshalGQL(v) + {{- end }} + {{- end }} + } + {{- end }} +{{- end }} diff --git a/example/chat/generated.go b/example/chat/generated.go index a02847d554..cb227e8b00 100644 --- a/example/chat/generated.go +++ b/example/chat/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package chat import ( @@ -344,102 +342,108 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) field_Mutation_post_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["text"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["text"] = arg0 var arg1 string if tmp, ok := rawArgs["username"]; ok { - var err error - arg1, err = graphql.UnmarshalString(tmp) + arg1, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["username"] = arg1 var arg2 string if tmp, ok := rawArgs["roomName"]; ok { - var err error - arg2, err = graphql.UnmarshalString(tmp) + arg2, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["roomName"] = arg2 return args, nil } func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_Query_room_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_Subscription_messageAdded_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["roomName"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["roomName"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -2431,3 +2435,14 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/example/config/generated.go b/example/config/generated.go index 3234f879ff..43f4a288b9 100644 --- a/example/config/generated.go +++ b/example/config/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package config import ( @@ -301,62 +299,60 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) field_Mutation_createTodo_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 NewTodo if tmp, ok := rawArgs["input"]; ok { - var err error - arg0, err = UnmarshalNewTodo(tmp) + arg0, err = unmarshalNewTodo2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋconfigᚐNewTodo(tmp) if err != nil { return nil, err } - mNewTodo1, err := e.NewTodoMiddleware(ctx, &arg0) - if err != nil { - return nil, err - } - arg0 = *mNewTodo1 } args["input"] = arg0 return args, nil } func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -1908,7 +1904,7 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co // region **************************** input.gotpl ***************************** -func UnmarshalNewTodo(v interface{}) (NewTodo, error) { +func unmarshalInputNewTodo(v interface{}) (NewTodo, error) { var it NewTodo var asMap = v.(map[string]interface{}) @@ -2350,3 +2346,17 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalNewTodo2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋconfigᚐNewTodo(v interface{}) (NewTodo, error) { + return unmarshalInputNewTodo(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/example/dataloader/generated.go b/example/dataloader/generated.go index b3ea025820..7e7e562e88 100644 --- a/example/dataloader/generated.go +++ b/example/dataloader/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package dataloader import ( @@ -354,103 +352,75 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_Query_torture1d_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 []int if tmp, ok := rawArgs["customerIds"]; ok { - var err error - var rawIf1 []interface{} - if tmp != nil { - if tmp1, ok := tmp.([]interface{}); ok { - rawIf1 = tmp1 - } else { - rawIf1 = []interface{}{tmp} - } - } - arg0 = make([]int, len(rawIf1)) - for idx1 := range rawIf1 { - arg0[idx1], err = graphql.UnmarshalInt(rawIf1[idx1]) - } + arg0, err = unmarshalInt2ᚕint(tmp) if err != nil { return nil, err } + } args["customerIds"] = arg0 return args, nil } func (e *executableSchema) field_Query_torture2d_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 [][]int if tmp, ok := rawArgs["customerIds"]; ok { - var err error - var rawIf1 []interface{} - if tmp != nil { - if tmp1, ok := tmp.([]interface{}); ok { - rawIf1 = tmp1 - } else { - rawIf1 = []interface{}{tmp} - } - } - arg0 = make([][]int, len(rawIf1)) - for idx1 := range rawIf1 { - var rawIf2 []interface{} - if rawIf1[idx1] != nil { - if tmp1, ok := rawIf1[idx1].([]interface{}); ok { - rawIf2 = tmp1 - } else { - rawIf2 = []interface{}{rawIf1[idx1]} - } - } - arg0[idx1] = make([]int, len(rawIf2)) - for idx2 := range rawIf2 { - arg0[idx1][idx2], err = graphql.UnmarshalInt(rawIf2[idx2]) - } - } + arg0, err = unmarshalInt2ᚕᚕint(tmp) if err != nil { return nil, err } + } args["customerIds"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -2779,3 +2749,55 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalInt2ᚕᚕint(v interface{}) ([][]int, error) { + var vSlice []interface{} + if v != nil { + if tmp1, ok := v.([]interface{}); ok { + vSlice = tmp1 + } else { + vSlice = []interface{}{v} + } + } + var err error + res := make([][]int, len(vSlice)) + for i := range vSlice { + res[i], err = unmarshalInt2ᚕint(vSlice[i]) + if err != nil { + return nil, err + } + } + return res, nil +} +func unmarshalInt2ᚕint(v interface{}) ([]int, error) { + var vSlice []interface{} + if v != nil { + if tmp1, ok := v.([]interface{}); ok { + vSlice = tmp1 + } else { + vSlice = []interface{}{v} + } + } + var err error + res := make([]int, len(vSlice)) + for i := range vSlice { + res[i], err = unmarshalInt2int(vSlice[i]) + if err != nil { + return nil, err + } + } + return res, nil +} +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalInt2int(v interface{}) (int, error) { + return graphql.UnmarshalInt(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/example/scalars/generated.go b/example/scalars/generated.go index 6738f8be81..5b7e09b0ee 100644 --- a/example/scalars/generated.go +++ b/example/scalars/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package scalars import ( @@ -325,83 +323,75 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_Query_search_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *model.SearchArgs if tmp, ok := rawArgs["input"]; ok { - var err error - var ptr1 model.SearchArgs - if tmp != nil { - ptr1, err = UnmarshalSearchArgs(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalSearchArgs2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋscalarsᚋmodelᚐSearchArgs(tmp) if err != nil { return nil, err } - if arg0 != nil { - var err error - arg0, err = e.SearchArgsMiddleware(ctx, arg0) - if err != nil { - return nil, err - } - } } args["input"] = arg0 return args, nil } func (e *executableSchema) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 external.ObjectID if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = model.UnmarshalID(tmp) + arg0, err = unmarshalID2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋscalarsᚋexternalᚐObjectID(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -2034,7 +2024,7 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co // region **************************** input.gotpl ***************************** -func UnmarshalSearchArgs(v interface{}) (model.SearchArgs, error) { +func unmarshalInputSearchArgs(v interface{}) (model.SearchArgs, error) { var it model.SearchArgs var asMap = v.(map[string]interface{}) @@ -2473,3 +2463,27 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalSearchArgs2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋscalarsᚋmodelᚐSearchArgs(v interface{}) (*model.SearchArgs, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalSearchArgs2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋscalarsᚋmodelᚐSearchArgs(v) + return &res, err +} +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalID2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋscalarsᚋexternalᚐObjectID(v interface{}) (external.ObjectID, error) { + return model.UnmarshalID(v) +} +func unmarshalSearchArgs2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋscalarsᚋmodelᚐSearchArgs(v interface{}) (model.SearchArgs, error) { + return unmarshalInputSearchArgs(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/example/selection/generated.go b/example/selection/generated.go index b6f9804881..c9f7d60ee8 100644 --- a/example/selection/generated.go +++ b/example/selection/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package selection import ( @@ -272,42 +270,45 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -2255,3 +2256,14 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/example/starwars/generated.go b/example/starwars/generated.go index e21a910cf3..a04b78244d 100644 --- a/example/starwars/generated.go +++ b/example/starwars/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package starwars import ( @@ -733,287 +731,261 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) field_Droid_friendsConnection_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *int if tmp, ok := rawArgs["first"]; ok { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalInt2ᚖint(tmp) if err != nil { return nil, err } + } args["first"] = arg0 var arg1 *string if tmp, ok := rawArgs["after"]; ok { - var err error - var ptr1 string - if tmp != nil { - ptr1, err = graphql.UnmarshalID(tmp) - arg1 = &ptr1 - } - + arg1, err = unmarshalID2ᚖstring(tmp) if err != nil { return nil, err } + } args["after"] = arg1 return args, nil } func (e *executableSchema) field_Human_friendsConnection_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *int if tmp, ok := rawArgs["first"]; ok { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalInt2ᚖint(tmp) if err != nil { return nil, err } + } args["first"] = arg0 var arg1 *string if tmp, ok := rawArgs["after"]; ok { - var err error - var ptr1 string - if tmp != nil { - ptr1, err = graphql.UnmarshalID(tmp) - arg1 = &ptr1 - } - + arg1, err = unmarshalID2ᚖstring(tmp) if err != nil { return nil, err } + } args["after"] = arg1 return args, nil } func (e *executableSchema) field_Human_height_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 LengthUnit if tmp, ok := rawArgs["unit"]; ok { - var err error - err = (&arg0).UnmarshalGQL(tmp) + arg0, err = unmarshalLengthUnit2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐLengthUnit(tmp) if err != nil { return nil, err } + } args["unit"] = arg0 return args, nil } func (e *executableSchema) field_Mutation_createReview_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 Episode if tmp, ok := rawArgs["episode"]; ok { - var err error - err = (&arg0).UnmarshalGQL(tmp) + arg0, err = unmarshalEpisode2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐEpisode(tmp) if err != nil { return nil, err } + } args["episode"] = arg0 var arg1 Review if tmp, ok := rawArgs["review"]; ok { - var err error - arg1, err = UnmarshalReviewInput(tmp) + arg1, err = unmarshalReviewInput2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐReview(tmp) if err != nil { return nil, err } - mReviewInput1, err := e.ReviewInputMiddleware(ctx, &arg1) - if err != nil { - return nil, err - } - arg1 = *mReviewInput1 } args["review"] = arg1 return args, nil } func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_Query_character_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalID(tmp) + arg0, err = unmarshalID2string(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field_Query_droid_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalID(tmp) + arg0, err = unmarshalID2string(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field_Query_hero_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *Episode if tmp, ok := rawArgs["episode"]; ok { - var err error - var ptr1 Episode - if tmp != nil { - err = (&ptr1).UnmarshalGQL(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalEpisode2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐEpisode(tmp) if err != nil { return nil, err } + } args["episode"] = arg0 return args, nil } func (e *executableSchema) field_Query_human_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalID(tmp) + arg0, err = unmarshalID2string(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field_Query_reviews_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 Episode if tmp, ok := rawArgs["episode"]; ok { - var err error - err = (&arg0).UnmarshalGQL(tmp) + arg0, err = unmarshalEpisode2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐEpisode(tmp) if err != nil { return nil, err } + } args["episode"] = arg0 var arg1 *time.Time if tmp, ok := rawArgs["since"]; ok { - var err error - var ptr1 time.Time - if tmp != nil { - ptr1, err = graphql.UnmarshalTime(tmp) - arg1 = &ptr1 - } - + arg1, err = unmarshalTime2ᚖtimeᚐTime(tmp) if err != nil { return nil, err } + } args["since"] = arg1 return args, nil } func (e *executableSchema) field_Query_search_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["text"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["text"] = arg0 return args, nil } func (e *executableSchema) field_Query_starship_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalID(tmp) + arg0, err = unmarshalID2string(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field_Starship_length_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *LengthUnit if tmp, ok := rawArgs["unit"]; ok { - var err error - var ptr1 LengthUnit - if tmp != nil { - err = (&ptr1).UnmarshalGQL(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalLengthUnit2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐLengthUnit(tmp) if err != nil { return nil, err } + } args["unit"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -3639,7 +3611,7 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co // region **************************** input.gotpl ***************************** -func UnmarshalReviewInput(v interface{}) (Review, error) { +func unmarshalInputReviewInput(v interface{}) (Review, error) { var it Review var asMap = v.(map[string]interface{}) @@ -4394,3 +4366,69 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalEpisode2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐEpisode(v interface{}) (*Episode, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalEpisode2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐEpisode(v) + return &res, err +} +func unmarshalLengthUnit2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐLengthUnit(v interface{}) (*LengthUnit, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalLengthUnit2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐLengthUnit(v) + return &res, err +} +func unmarshalInt2ᚖint(v interface{}) (*int, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalInt2int(v) + return &res, err +} +func unmarshalID2ᚖstring(v interface{}) (*string, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalID2string(v) + return &res, err +} +func unmarshalTime2ᚖtimeᚐTime(v interface{}) (*time.Time, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalTime2timeᚐTime(v) + return &res, err +} +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalEpisode2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐEpisode(v interface{}) (Episode, error) { + var res Episode + return res, res.UnmarshalGQL(v) +} +func unmarshalLengthUnit2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐLengthUnit(v interface{}) (LengthUnit, error) { + var res LengthUnit + return res, res.UnmarshalGQL(v) +} +func unmarshalReviewInput2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋstarwarsᚐReview(v interface{}) (Review, error) { + return unmarshalInputReviewInput(v) +} +func unmarshalInt2int(v interface{}) (int, error) { + return graphql.UnmarshalInt(v) +} +func unmarshalID2string(v interface{}) (string, error) { + return graphql.UnmarshalID(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} +func unmarshalTime2timeᚐTime(v interface{}) (time.Time, error) { + return graphql.UnmarshalTime(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/example/todo/generated.go b/example/todo/generated.go index e6353a857b..31c49124f8 100644 --- a/example/todo/generated.go +++ b/example/todo/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package todo import ( @@ -331,113 +329,114 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) dir_hasRole_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 Role if tmp, ok := rawArgs["role"]; ok { - var err error - err = (&arg0).UnmarshalGQL(tmp) + arg0, err = unmarshalRole2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋtodoᚐRole(tmp) if err != nil { return nil, err } + } args["role"] = arg0 return args, nil } func (e *executableSchema) field_MyMutation_createTodo_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 TodoInput if tmp, ok := rawArgs["todo"]; ok { - var err error - arg0, err = UnmarshalTodoInput(tmp) + arg0, err = unmarshalTodoInput2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋtodoᚐTodoInput(tmp) if err != nil { return nil, err } - mTodoInput1, err := e.TodoInputMiddleware(ctx, &arg0) - if err != nil { - return nil, err - } - arg0 = *mTodoInput1 } args["todo"] = arg0 return args, nil } func (e *executableSchema) field_MyMutation_updateTodo_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 int if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalInt(tmp) + arg0, err = unmarshalInt2int(tmp) if err != nil { return nil, err } + } args["id"] = arg0 var arg1 map[string]interface{} if tmp, ok := rawArgs["changes"]; ok { - var err error - arg1 = tmp.(map[string]interface{}) + arg1, err = unmarshalMap2map(tmp) if err != nil { return nil, err } + } args["changes"] = arg1 return args, nil } func (e *executableSchema) field_MyQuery___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_MyQuery_todo_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 int if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalInt(tmp) + arg0, err = unmarshalInt2int(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -1981,7 +1980,7 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co // region **************************** input.gotpl ***************************** -func UnmarshalTodoInput(v interface{}) (TodoInput, error) { +func unmarshalInputTodoInput(v interface{}) (TodoInput, error) { var it TodoInput var asMap = v.(map[string]interface{}) @@ -2395,3 +2394,27 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalRole2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋtodoᚐRole(v interface{}) (Role, error) { + var res Role + return res, res.UnmarshalGQL(v) +} +func unmarshalTodoInput2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋtodoᚐTodoInput(v interface{}) (TodoInput, error) { + return unmarshalInputTodoInput(v) +} +func unmarshalInt2int(v interface{}) (int, error) { + return graphql.UnmarshalInt(v) +} +func unmarshalMap2map(v interface{}) (map[string]interface{}, error) { + return graphql.UnmarshalMap(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/example/type-system-extension/generated.go b/example/type-system-extension/generated.go index 44c0b0d27d..93ba19e73e 100644 --- a/example/type-system-extension/generated.go +++ b/example/type-system-extension/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package type_system_extension import ( @@ -400,76 +398,75 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) field_MyMutation_createTodo_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 TodoInput if tmp, ok := rawArgs["todo"]; ok { - var err error - arg0, err = UnmarshalTodoInput(tmp) + arg0, err = unmarshalTodoInput2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋtypeᚑsystemᚑextensionᚐTodoInput(tmp) if err != nil { return nil, err } - mTodoInput1, err := e.TodoInputMiddleware(ctx, &arg0) - if err != nil { - return nil, err - } - arg0 = *mTodoInput1 } args["todo"] = arg0 return args, nil } func (e *executableSchema) field_MyQuery___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_MyQuery_todo_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["id"]; ok { - var err error - arg0, err = graphql.UnmarshalID(tmp) + arg0, err = unmarshalID2string(tmp) if err != nil { return nil, err } + } args["id"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -1975,7 +1972,7 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co // region **************************** input.gotpl ***************************** -func UnmarshalTodoInput(v interface{}) (TodoInput, error) { +func unmarshalInputTodoInput(v interface{}) (TodoInput, error) { var it TodoInput var asMap = v.(map[string]interface{}) @@ -2418,3 +2415,20 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalTodoInput2githubᚗcomᚋ99designsᚋgqlgenᚋexampleᚋtypeᚑsystemᚑextensionᚐTodoInput(v interface{}) (TodoInput, error) { + return unmarshalInputTodoInput(v) +} +func unmarshalID2string(v interface{}) (string, error) { + return graphql.UnmarshalID(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/integration/generated.go b/integration/generated.go index 0b7a6da6d2..bbe0853f30 100644 --- a/integration/generated.go +++ b/integration/generated.go @@ -1,5 +1,3 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - package integration import ( @@ -360,100 +358,90 @@ func chainFieldMiddleware(handleFunc ...graphql.FieldMiddleware) graphql.FieldMi // region ***************************** args.gotpl ***************************** func (e *executableSchema) dir_magic_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *int if tmp, ok := rawArgs["kind"]; ok { - var err error - var ptr1 int - if tmp != nil { - ptr1, err = graphql.UnmarshalInt(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalInt2ᚖint(tmp) if err != nil { return nil, err } + } args["kind"] = arg0 return args, nil } func (e *executableSchema) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 string if tmp, ok := rawArgs["name"]; ok { - var err error - arg0, err = graphql.UnmarshalString(tmp) + arg0, err = unmarshalString2string(tmp) if err != nil { return nil, err } + } args["name"] = arg0 return args, nil } func (e *executableSchema) field_Query_date_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 models.DateFilter if tmp, ok := rawArgs["filter"]; ok { - var err error - arg0, err = UnmarshalDateFilter(tmp) + arg0, err = unmarshalDateFilter2githubᚗcomᚋ99designsᚋgqlgenᚋintegrationᚋmodelsᚑgoᚐDateFilter(tmp) if err != nil { return nil, err } - mDateFilter1, err := e.DateFilterMiddleware(ctx, &arg0) - if err != nil { - return nil, err - } - arg0 = *mDateFilter1 } args["filter"] = arg0 return args, nil } func (e *executableSchema) field_Query_error_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 *models.ErrorType if tmp, ok := rawArgs["type"]; ok { - var err error - var ptr1 models.ErrorType - if tmp != nil { - err = (&ptr1).UnmarshalGQL(tmp) - arg0 = &ptr1 - } - + arg0, err = unmarshalErrorType2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋintegrationᚋmodelsᚑgoᚐErrorType(tmp) if err != nil { return nil, err } + } args["type"] = arg0 return args, nil } func (e *executableSchema) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil } func (e *executableSchema) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error args := map[string]interface{}{} var arg0 bool if tmp, ok := rawArgs["includeDeprecated"]; ok { - var err error - arg0, err = graphql.UnmarshalBoolean(tmp) + arg0, err = unmarshalBoolean2bool(tmp) if err != nil { return nil, err } + } args["includeDeprecated"] = arg0 return args, nil @@ -2085,7 +2073,7 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co // region **************************** input.gotpl ***************************** -func UnmarshalDateFilter(v interface{}) (models.DateFilter, error) { +func unmarshalInputDateFilter(v interface{}) (models.DateFilter, error) { var it models.DateFilter var asMap = v.(map[string]interface{}) @@ -2572,3 +2560,38 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o } // endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func unmarshalErrorType2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋintegrationᚋmodelsᚑgoᚐErrorType(v interface{}) (*models.ErrorType, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalErrorType2githubᚗcomᚋ99designsᚋgqlgenᚋintegrationᚋmodelsᚑgoᚐErrorType(v) + return &res, err +} +func unmarshalInt2ᚖint(v interface{}) (*int, error) { + if v == nil { + return nil, nil + } + res, err := unmarshalInt2int(v) + return &res, err +} +func unmarshalBoolean2bool(v interface{}) (bool, error) { + return graphql.UnmarshalBoolean(v) +} +func unmarshalDateFilter2githubᚗcomᚋ99designsᚋgqlgenᚋintegrationᚋmodelsᚑgoᚐDateFilter(v interface{}) (models.DateFilter, error) { + return unmarshalInputDateFilter(v) +} +func unmarshalErrorType2githubᚗcomᚋ99designsᚋgqlgenᚋintegrationᚋmodelsᚑgoᚐErrorType(v interface{}) (models.ErrorType, error) { + var res models.ErrorType + return res, res.UnmarshalGQL(v) +} +func unmarshalInt2int(v interface{}) (int, error) { + return graphql.UnmarshalInt(v) +} +func unmarshalString2string(v interface{}) (string, error) { + return graphql.UnmarshalString(v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/plugin/modelgen/models.go b/plugin/modelgen/models.go index c41645dde2..62a53ad191 100644 --- a/plugin/modelgen/models.go +++ b/plugin/modelgen/models.go @@ -73,7 +73,7 @@ func (m *Plugin) MutateConfig(cfg *config.Config) error { cfg.InjectBuiltins(schema) - binder, err := cfg.NewBinder() + binder, err := cfg.NewBinder(schema) if err != nil { return err }