diff options
Diffstat (limited to 'pkg/templates.go')
-rw-r--r-- | pkg/templates.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/pkg/templates.go b/pkg/templates.go new file mode 100644 index 0000000..0b7e11b --- /dev/null +++ b/pkg/templates.go @@ -0,0 +1,44 @@ +package gonf + +import ( + "bytes" + "log/slog" + "text/template" +) + +// ----- Globals --------------------------------------------------------------- +var templates *template.Template + +// ----- Init ------------------------------------------------------------------ +func init() { + templates = template.New("") + templates.Option("missingkey=error") + templates.Funcs(builtinTemplateFunctions) +} + +// ----- Public ---------------------------------------------------------------- +type TemplateValue struct { + contents []byte + data string +} + +func (t *TemplateValue) Bytes() []byte { + if t.contents == nil { + tpl := templates.New("") + if _, err := tpl.Parse(t.data); err != nil { + slog.Error("template", "step", "Parse", "data", t.data, "error", err) + return nil + } + var buff bytes.Buffer + if err := tpl.Execute(&buff, nil /* no data needed */); err != nil { + slog.Error("template", "step", "Execute", "data", t.data, "error", err) + return nil + } + t.contents = buff.Bytes() + } + return t.contents +} + +func (t TemplateValue) String() string { + return string(t.Bytes()[:]) +} |