1
0
mirror of https://github.com/go-micro/go-micro.git synced 2025-04-23 11:07:43 +02:00
go-micro/cmd/gomu/generator/generator.go

74 lines
1.2 KiB
Go
Raw Normal View History

package generator
import (
"os"
"path/filepath"
"strings"
"text/template"
)
type Generator interface {
Generate([]File) error
}
type generator struct {
opts Options
}
type File struct {
Path string
Template string
}
// Generate generates project template files.
func (g *generator) Generate(files []File) error {
for _, file := range files {
fp := filepath.Join(g.opts.Directory, file.Path)
dir := filepath.Dir(fp)
if _, err := os.Stat(dir); os.IsNotExist(err) {
if err := os.MkdirAll(dir, 0755); err != nil {
return err
}
}
f, err := os.Create(fp)
if err != nil {
return err
}
fn := template.FuncMap{
"dehyphen": func(s string) string {
return strings.ReplaceAll(s, "-", "")
},
"lower": strings.ToLower,
"title": func(s string) string {
return strings.ReplaceAll(strings.Title(s), "-", "")
},
}
t, err := template.New(fp).Funcs(fn).Parse(file.Template)
if err != nil {
return err
}
err = t.Execute(f, g.opts)
if err != nil {
return err
}
}
return nil
}
// New returns a new generator struct.
func New(opts ...Option) Generator {
var options Options
for _, o := range opts {
o(&options)
}
return &generator{
opts: options,
}
}