44 lines
923 B
Go
44 lines
923 B
Go
package gonf
|
|
|
|
import (
|
|
"bytes"
|
|
"log/slog"
|
|
"strconv"
|
|
"text/template"
|
|
)
|
|
|
|
var templates *template.Template
|
|
|
|
func init() {
|
|
templates = template.New("")
|
|
templates.Option("missingkey=error")
|
|
templates.Funcs(builtinTemplateFunctions)
|
|
}
|
|
|
|
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) Int() (int, error) {
|
|
return strconv.Atoi(t.String())
|
|
}
|
|
func (t TemplateValue) String() string {
|
|
return string(t.Bytes()[:])
|
|
}
|