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