github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/newapp/api/api.go (about)

     1  package api
     2  
     3  import (
     4  	"embed"
     5  	"html/template"
     6  	"io/fs"
     7  
     8  	"github.com/JarrahG/buffalocli/internal/genny/newapp/core"
     9  	"github.com/gobuffalo/genny/v2"
    10  	"github.com/gobuffalo/genny/v2/gogen"
    11  )
    12  
    13  //go:embed templates/*
    14  var templates embed.FS
    15  
    16  // Templates used for api project files
    17  // (exported mostly for the "fix" command)
    18  func Templates() (fs.FS, error) {
    19  	return fs.Sub(templates, "templates")
    20  }
    21  
    22  // New generator for creating a Buffalo API application
    23  func New(opts *Options) (*genny.Group, error) {
    24  	if err := opts.Validate(); err != nil {
    25  		return nil, err
    26  	}
    27  
    28  	gg, err := core.New(opts.Options)
    29  	if err != nil {
    30  		return gg, err
    31  	}
    32  
    33  	g := genny.New()
    34  	data := map[string]interface{}{
    35  		"opts": opts,
    36  	}
    37  
    38  	helpers := template.FuncMap{}
    39  
    40  	t := gogen.TemplateTransformer(data, helpers)
    41  	g.Transformer(t)
    42  	sub, err := Templates()
    43  	if err != nil {
    44  		return gg, err
    45  	}
    46  
    47  	if err := g.FS(sub); err != nil {
    48  		return gg, err
    49  	}
    50  
    51  	gg.Add(g)
    52  	return gg, nil
    53  }