templatex.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package templatex
  2. import (
  3. "bytes"
  4. goformat "go/format"
  5. "io/ioutil"
  6. "text/template"
  7. "github.com/tal-tech/go-zero/tools/goctl/util"
  8. )
  9. const regularPerm = 0666
  10. type defaultTemplate struct {
  11. name string
  12. text string
  13. goFmt bool
  14. savePath string
  15. }
  16. func With(name string) *defaultTemplate {
  17. return &defaultTemplate{
  18. name: name,
  19. }
  20. }
  21. func (t *defaultTemplate) Parse(text string) *defaultTemplate {
  22. t.text = text
  23. return t
  24. }
  25. func (t *defaultTemplate) GoFmt(format bool) *defaultTemplate {
  26. t.goFmt = format
  27. return t
  28. }
  29. func (t *defaultTemplate) SaveTo(data interface{}, path string, forceUpdate bool) error {
  30. if util.FileExists(path) && !forceUpdate {
  31. return nil
  32. }
  33. output, err := t.Execute(data)
  34. if err != nil {
  35. return err
  36. }
  37. return ioutil.WriteFile(path, output.Bytes(), regularPerm)
  38. }
  39. func (t *defaultTemplate) Execute(data interface{}) (*bytes.Buffer, error) {
  40. tem, err := template.New(t.name).Parse(t.text)
  41. if err != nil {
  42. return nil, err
  43. }
  44. buf := new(bytes.Buffer)
  45. if err = tem.Execute(buf, data); err != nil {
  46. return nil, err
  47. }
  48. if !t.goFmt {
  49. return buf, nil
  50. }
  51. formatOutput, err := goformat.Source(buf.Bytes())
  52. if err != nil {
  53. return nil, err
  54. }
  55. buf.Reset()
  56. buf.Write(formatOutput)
  57. return buf, nil
  58. }