aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/99designs/gqlgen/plugin/modelgen/models.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/99designs/gqlgen/plugin/modelgen/models.go')
-rw-r--r--vendor/github.com/99designs/gqlgen/plugin/modelgen/models.go33
1 files changed, 29 insertions, 4 deletions
diff --git a/vendor/github.com/99designs/gqlgen/plugin/modelgen/models.go b/vendor/github.com/99designs/gqlgen/plugin/modelgen/models.go
index 508cc14d..bb400f1b 100644
--- a/vendor/github.com/99designs/gqlgen/plugin/modelgen/models.go
+++ b/vendor/github.com/99designs/gqlgen/plugin/modelgen/models.go
@@ -1,6 +1,7 @@
package modelgen
import (
+ "fmt"
"go/types"
"sort"
@@ -110,6 +111,7 @@ func (m *Plugin) MutateConfig(cfg *config.Config) error {
for _, field := range schemaType.Fields {
var typ types.Type
+ fieldDef := schema.Types[field.Type.Name()]
if cfg.Models.UserDefined(field.Type.Name()) {
pkg, typeName := code.PkgAndType(cfg.Models[field.Type.Name()].Model[0])
@@ -118,7 +120,6 @@ func (m *Plugin) MutateConfig(cfg *config.Config) error {
return err
}
} else {
- fieldDef := schema.Types[field.Type.Name()]
switch fieldDef.Kind {
case ast.Scalar:
// no user defined model, referencing a default scalar
@@ -127,6 +128,7 @@ func (m *Plugin) MutateConfig(cfg *config.Config) error {
nil,
nil,
)
+
case ast.Interface, ast.Union:
// no user defined model, referencing a generated interface type
typ = types.NewNamed(
@@ -134,13 +136,25 @@ func (m *Plugin) MutateConfig(cfg *config.Config) error {
types.NewInterfaceType([]*types.Func{}, []types.Type{}),
nil,
)
- default:
- // no user defined model, must reference another generated model
+
+ case ast.Enum:
+ // no user defined model, must reference a generated enum
typ = types.NewNamed(
types.NewTypeName(0, cfg.Model.Pkg(), templates.ToGo(field.Type.Name()), nil),
nil,
nil,
)
+
+ case ast.Object, ast.InputObject:
+ // no user defined model, must reference a generated struct
+ typ = types.NewNamed(
+ types.NewTypeName(0, cfg.Model.Pkg(), templates.ToGo(field.Type.Name()), nil),
+ types.NewStruct(nil, nil),
+ nil,
+ )
+
+ default:
+ panic(fmt.Errorf("unknown ast type %s", fieldDef.Kind))
}
}
@@ -149,9 +163,15 @@ func (m *Plugin) MutateConfig(cfg *config.Config) error {
name = nameOveride
}
+ typ = binder.CopyModifiersFromAst(field.Type, typ)
+
+ if isStruct(typ) && (fieldDef.Kind == ast.Object || fieldDef.Kind == ast.InputObject) {
+ typ = types.NewPointer(typ)
+ }
+
it.Fields = append(it.Fields, &Field{
Name: name,
- Type: binder.CopyModifiersFromAst(field.Type, typ),
+ Type: typ,
Description: field.Description,
Tag: `json:"` + field.Name + `"`,
})
@@ -205,3 +225,8 @@ func (m *Plugin) MutateConfig(cfg *config.Config) error {
GeneratedHeader: true,
})
}
+
+func isStruct(t types.Type) bool {
+ _, is := t.Underlying().(*types.Struct)
+ return is
+}