1 package stubgen 2 3 import ( 4 _ "embed" 5 "path/filepath" 6 "syscall" 7 8 "github.com/99designs/gqlgen/codegen" 9 "github.com/99designs/gqlgen/codegen/config" 10 "github.com/99designs/gqlgen/codegen/templates" 11 "github.com/99designs/gqlgen/internal/code" 12 "github.com/99designs/gqlgen/plugin" 13 ) 14 15 //go:embed stubs.gotpl 16 var stubsTemplate string 17 18 func New(filename string, typename string) plugin.Plugin { 19 return &Plugin{filename: filename, typeName: typename} 20 } 21 22 type Plugin struct { 23 filename string 24 typeName string 25 } 26 27 var ( 28 _ plugin.CodeGenerator = &Plugin{} 29 _ plugin.ConfigMutator = &Plugin{} 30 ) 31 32 func (m *Plugin) Name() string { 33 return "stubgen" 34 } 35 36 func (m *Plugin) MutateConfig(cfg *config.Config) error { 37 _ = syscall.Unlink(m.filename) 38 return nil 39 } 40 41 func (m *Plugin) GenerateCode(data *codegen.Data) error { 42 abs, err := filepath.Abs(m.filename) 43 if err != nil { 44 return err 45 } 46 pkgName := code.NameForDir(filepath.Dir(abs)) 47 48 return templates.Render(templates.Options{ 49 PackageName: pkgName, 50 Filename: m.filename, 51 Data: &ResolverBuild{ 52 Data: data, 53 TypeName: m.typeName, 54 }, 55 GeneratedHeader: true, 56 Packages: data.Config.Packages, 57 Template: stubsTemplate, 58 }) 59 } 60 61 type ResolverBuild struct { 62 *codegen.Data 63 64 TypeName string 65 } 66