Skip to content

Commit

Permalink
address comment
Browse files Browse the repository at this point in the history
  • Loading branch information
vvakame committed Jul 3, 2018
1 parent 86dcce7 commit 8577cea
Show file tree
Hide file tree
Showing 9 changed files with 141 additions and 136 deletions.
104 changes: 52 additions & 52 deletions codegen/codegen.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,58 +18,60 @@ import (
)

type Config struct {
SchemaStr string
Typemap TypeMap
SchemaFilename string `yaml:"schema,omitempty"`
SchemaStr string `yaml:"-"`
Typemap TypeMap `yaml:"models,omitempty"`

schema *schema.Schema
schema *schema.Schema `yaml:"-"`

ExecFilename string
ExecPackageName string
execPackagePath string
execDir string
ExecFilename string `yaml:"output,omitempty"`
ExecPackageName string `yaml:"package,omitempty"`
execPackagePath string `yaml:"-"`
execDir string `yaml:"-"`

ModelFilename string
ModelPackageName string
modelPackagePath string
modelDir string
ModelFilename string `yaml:"modeloutput,omitempty"`
ModelPackageName string `yaml:"modelpackage,omitempty"`
modelPackagePath string `yaml:"-"`
modelDir string `yaml:"-"`
}

type TypeMap []TypeMapEntry
func (cfg *Config) Check() error {
err := cfg.Typemap.Check()
if err != nil {
return fmt.Errorf("config: %s", err.Error())
}
return nil
}

type TypeMap map[string]TypeMapEntry

func (tm TypeMap) Exists(typeName string) bool {
return tm.Get(typeName) != nil
}

func (tm TypeMap) Get(typeName string) *TypeMapEntry {
for _, entry := range tm {
if entry.TypeName == typeName {
return &entry
}
entry, ok := tm[typeName]
if !ok {
return nil
}

return nil
return &entry
}

func (tm TypeMap) Check() error {
for idx, entry := range tm {
if entry.TypeName == "" {
return fmt.Errorf("entity #%d: typeName is not defined", idx+1)
}
if entry.EntityPath == "" {
return fmt.Errorf("entity #%d: entityPath is not defined", idx+1)
for typeName, entry := range tm {
if entry.Model == "" {
return fmt.Errorf("model %s: entityPath is not defined", typeName)
}
}
return nil
}

type TypeMapEntry struct {
TypeName string `yaml:"typeName"`
EntityPath string `yaml:"entityPath"`
Fields []TypeMapField
Model string `yaml:"model"`
Fields map[string]TypeMapField `yaml:"fields,omitempty"`
}

type TypeMapField struct {
FieldName string `yaml:"fieldName"`
}

func Generate(cfg Config) error {
Expand All @@ -96,17 +98,15 @@ func Generate(cfg Config) error {
return err
}
for _, model := range modelsBuild.Models {
cfg.Typemap = append(cfg.Typemap, TypeMapEntry{
TypeName: model.GQLType,
EntityPath: cfg.modelPackagePath + "." + model.GoType,
})
cfg.Typemap[model.GQLType] = TypeMapEntry{
Model: cfg.modelPackagePath + "." + model.GoType,
}
}

for _, enum := range modelsBuild.Enums {
cfg.Typemap = append(cfg.Typemap, TypeMapEntry{
TypeName: enum.GQLType,
EntityPath: cfg.modelPackagePath + "." + enum.GoType,
})
cfg.Typemap[enum.GQLType] = TypeMapEntry{
Model: cfg.modelPackagePath + "." + enum.GoType,
}
}
}

Expand Down Expand Up @@ -153,27 +153,27 @@ func (cfg *Config) normalize() error {
cfg.execPackagePath = fullPackageName(cfg.execDir, cfg.ExecPackageName)

builtins := TypeMap{
{TypeName: "__Directive", EntityPath: "github.com/vektah/gqlgen/neelance/introspection.Directive"},
{TypeName: "__Type", EntityPath: "github.com/vektah/gqlgen/neelance/introspection.Type"},
{TypeName: "__Field", EntityPath: "github.com/vektah/gqlgen/neelance/introspection.Field"},
{TypeName: "__EnumValue", EntityPath: "github.com/vektah/gqlgen/neelance/introspection.EnumValue"},
{TypeName: "__InputValue", EntityPath: "github.com/vektah/gqlgen/neelance/introspection.InputValue"},
{TypeName: "__Schema", EntityPath: "github.com/vektah/gqlgen/neelance/introspection.Schema"},
{TypeName: "Int", EntityPath: "github.com/vektah/gqlgen/graphql.Int"},
{TypeName: "Float", EntityPath: "github.com/vektah/gqlgen/graphql.Float"},
{TypeName: "String", EntityPath: "github.com/vektah/gqlgen/graphql.String"},
{TypeName: "Boolean", EntityPath: "github.com/vektah/gqlgen/graphql.Boolean"},
{TypeName: "ID", EntityPath: "github.com/vektah/gqlgen/graphql.ID"},
{TypeName: "Time", EntityPath: "github.com/vektah/gqlgen/graphql.Time"},
{TypeName: "Map", EntityPath: "github.com/vektah/gqlgen/graphql.Map"},
"__Directive": {Model: "github.com/vektah/gqlgen/neelance/introspection.Directive"},
"__Type": {Model: "github.com/vektah/gqlgen/neelance/introspection.Type"},
"__Field": {Model: "github.com/vektah/gqlgen/neelance/introspection.Field"},
"__EnumValue": {Model: "github.com/vektah/gqlgen/neelance/introspection.EnumValue"},
"__InputValue": {Model: "github.com/vektah/gqlgen/neelance/introspection.InputValue"},
"__Schema": {Model: "github.com/vektah/gqlgen/neelance/introspection.Schema"},
"Int": {Model: "github.com/vektah/gqlgen/graphql.Int"},
"Float": {Model: "github.com/vektah/gqlgen/graphql.Float"},
"String": {Model: "github.com/vektah/gqlgen/graphql.String"},
"Boolean": {Model: "github.com/vektah/gqlgen/graphql.Boolean"},
"ID": {Model: "github.com/vektah/gqlgen/graphql.ID"},
"Time": {Model: "github.com/vektah/gqlgen/graphql.Time"},
"Map": {Model: "github.com/vektah/gqlgen/graphql.Map"},
}

if cfg.Typemap == nil {
cfg.Typemap = TypeMap{}
}
for _, entry := range builtins {
if !cfg.Typemap.Exists(entry.TypeName) {
cfg.Typemap = append(cfg.Typemap, entry)
for typeName, entry := range builtins {
if !cfg.Typemap.Exists(typeName) {
cfg.Typemap[typeName] = entry
}
}

Expand Down
4 changes: 2 additions & 2 deletions codegen/import_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func TestInvalidPackagenames(t *testing.T) {
id: Int!
}
`, TypeMap{
{TypeName: "InvalidIdentifier", EntityPath: "github.com/vektah/gqlgen/codegen/testdata/invalid-packagename.InvalidIdentifier"},
"InvalidIdentifier": {Model: "github.com/vektah/gqlgen/codegen/testdata/invalid-packagename.InvalidIdentifier"},
})

require.NoError(t, err)
Expand All @@ -31,7 +31,7 @@ func TestImportCollisions(t *testing.T) {
}
`, TypeMap{
{TypeName: "It", EntityPath: "github.com/vektah/gqlgen/codegen/testdata/introspection.It"},
"It": {Model: "github.com/vektah/gqlgen/codegen/testdata/introspection.It"},
})

require.NoError(t, err)
Expand Down
6 changes: 3 additions & 3 deletions codegen/input_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func TestRawMapInputs(t *testing.T) {
b: Int
}
`, TypeMap{
{TypeName: "Changes", EntityPath: "map[string]interface{}"},
"Changes": {Model: "map[string]interface{}"},
})

require.NoError(t, err)
Expand All @@ -57,7 +57,7 @@ func TestRecursiveInputType(t *testing.T) {
self: [RecursiveInputSlice!]
}
`, TypeMap{
{TypeName: "RecursiveInputSlice", EntityPath: "github.com/vektah/gqlgen/codegen/testdata.RecursiveInputSlice"},
"RecursiveInputSlice": {Model: "github.com/vektah/gqlgen/codegen/testdata.RecursiveInputSlice"},
})

require.NoError(t, err)
Expand Down Expand Up @@ -85,7 +85,7 @@ func TestComplexInputTypes(t *testing.T) {
id: Int!
}
`, TypeMap{
{TypeName: "Changes", EntityPath: "map[string]interface{}"},
"Changes": {Model: "map[string]interface{}"},
})

require.NoError(t, err)
Expand Down
8 changes: 4 additions & 4 deletions codegen/interface_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ func TestShapes(t *testing.T) {
}
union ShapeUnion = Circle | Rectangle
`, TypeMap{
{TypeName: "Shape", EntityPath: "github.com/vektah/gqlgen/codegen/testdata.Shape"},
{TypeName: "ShapeUnion", EntityPath: "github.com/vektah/gqlgen/codegen/testdata.ShapeUnion"},
{TypeName: "Circle", EntityPath: "github.com/vektah/gqlgen/codegen/testdata.Circle"},
{TypeName: "Rectangle", EntityPath: "github.com/vektah/gqlgen/codegen/testdata.Rectangle"},
"Shape": {Model: "github.com/vektah/gqlgen/codegen/testdata.Shape"},
"ShapeUnion": {Model: "github.com/vektah/gqlgen/codegen/testdata.ShapeUnion"},
"Circle": {Model: "github.com/vektah/gqlgen/codegen/testdata.Circle"},
"Rectangle": {Model: "github.com/vektah/gqlgen/codegen/testdata.Rectangle"},
})

require.NoError(t, err)
Expand Down
2 changes: 1 addition & 1 deletion codegen/type_build.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func (cfg *Config) buildNamedTypes() NamedTypes {

userType := ""
if userEntry := cfg.Typemap.Get(t.GQLType); userEntry != nil {
userType = userEntry.EntityPath
userType = userEntry.Model
}
t.IsUserDefined = userType != ""
if userType == "" && t.IsScalar {
Expand Down
Loading

0 comments on commit 8577cea

Please sign in to comment.