You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.2 KiB
Go
73 lines
1.2 KiB
Go
4 years ago
|
package templatex
|
||
4 years ago
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
goformat "go/format"
|
||
|
"io/ioutil"
|
||
|
"text/template"
|
||
|
|
||
4 years ago
|
"github.com/tal-tech/go-zero/tools/goctl/util"
|
||
4 years ago
|
)
|
||
|
|
||
4 years ago
|
const regularPerm = 0666
|
||
|
|
||
|
type defaultTemplate struct {
|
||
|
name string
|
||
|
text string
|
||
|
goFmt bool
|
||
|
savePath string
|
||
|
}
|
||
|
|
||
4 years ago
|
func With(name string) *defaultTemplate {
|
||
|
return &defaultTemplate{
|
||
|
name: name,
|
||
|
}
|
||
|
}
|
||
|
func (t *defaultTemplate) Parse(text string) *defaultTemplate {
|
||
|
t.text = text
|
||
|
return t
|
||
|
}
|
||
|
|
||
|
func (t *defaultTemplate) GoFmt(format bool) *defaultTemplate {
|
||
|
t.goFmt = format
|
||
|
return t
|
||
|
}
|
||
|
|
||
4 years ago
|
func (t *defaultTemplate) SaveTo(data interface{}, path string, forceUpdate bool) error {
|
||
4 years ago
|
if util.FileExists(path) && !forceUpdate {
|
||
4 years ago
|
return nil
|
||
|
}
|
||
4 years ago
|
|
||
|
output, err := t.Execute(data)
|
||
4 years ago
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
4 years ago
|
return ioutil.WriteFile(path, output.Bytes(), regularPerm)
|
||
4 years ago
|
}
|
||
|
|
||
4 years ago
|
func (t *defaultTemplate) Execute(data interface{}) (*bytes.Buffer, error) {
|
||
4 years ago
|
tem, err := template.New(t.name).Parse(t.text)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
4 years ago
|
|
||
4 years ago
|
buf := new(bytes.Buffer)
|
||
4 years ago
|
if err = tem.Execute(buf, data); err != nil {
|
||
4 years ago
|
return nil, err
|
||
|
}
|
||
4 years ago
|
|
||
4 years ago
|
if !t.goFmt {
|
||
|
return buf, nil
|
||
|
}
|
||
4 years ago
|
|
||
4 years ago
|
formatOutput, err := goformat.Source(buf.Bytes())
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
4 years ago
|
|
||
4 years ago
|
buf.Reset()
|
||
|
buf.Write(formatOutput)
|
||
|
return buf, nil
|
||
|
}
|