package template import ( "bytes" "github.com/Masterminds/sprig/v3" "text/template" ) type ParseTemplateOption func(tpl *template.Template) func WithDelim(leftDelim string, rightDelim string) ParseTemplateOption { return func(tpl *template.Template) { tpl.Delims(leftDelim, rightDelim) } } func ParseTemplateStringToString(inputStr string, params any, opts ...ParseTemplateOption) (string, error) { tpl := template.New(inputStr) for _, opt := range opts { opt(tpl) } tpl.Funcs(sprig.FuncMap()) tpl.Funcs(templateFuncMap) return parseTemplateStringToString(tpl, inputStr, params) } func parseTemplateStringToString(tpl *template.Template, inputStr string, params any) (string, error) { tpl, err := tpl.Parse(inputStr) if err != nil { return "", err } buffer := &bytes.Buffer{} err = tpl.Execute(buffer, params) if err != nil { return "", err } return buffer.String(), nil }