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  }