github.com/operandinc/gqlgen@v0.16.1/plugin/stubgen/stubs.go (about)

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