templatex.go 1.3 KB

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