template.go 910 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package template
  2. import (
  3. "bytes"
  4. "github.com/Masterminds/sprig/v3"
  5. "text/template"
  6. )
  7. type ParseTemplateOption func(tpl *template.Template)
  8. func WithDelim(leftDelim string, rightDelim string) ParseTemplateOption {
  9. return func(tpl *template.Template) {
  10. tpl.Delims(leftDelim, rightDelim)
  11. }
  12. }
  13. func ParseTemplateStringToString(inputStr string, params any, opts ...ParseTemplateOption) (string, error) {
  14. tpl := template.New(inputStr)
  15. for _, opt := range opts {
  16. opt(tpl)
  17. }
  18. tpl.Funcs(sprig.FuncMap())
  19. tpl.Funcs(templateFuncMap)
  20. return parseTemplateStringToString(tpl, inputStr, params)
  21. }
  22. func parseTemplateStringToString(tpl *template.Template, inputStr string, params any) (string, error) {
  23. tpl, err := tpl.Parse(inputStr)
  24. if err != nil {
  25. return "", err
  26. }
  27. buffer := &bytes.Buffer{}
  28. err = tpl.Execute(buffer, params)
  29. if err != nil {
  30. return "", err
  31. }
  32. return buffer.String(), nil
  33. }