31 lines
1.1 KiB
Go
31 lines
1.1 KiB
Go
// Package template рендерит шаблоны файлов (аналог модуля `template` из
|
||
// Ansible) через стандартный text/template с добавленными функциями
|
||
// sprig — свой парсер, а не сторонняя реализация Jinja2, чтобы не зависеть
|
||
// от чужой грамматики.
|
||
package template
|
||
|
||
import (
|
||
"strings"
|
||
"text/template"
|
||
|
||
"github.com/Masterminds/sprig/v3"
|
||
)
|
||
|
||
// Render рендерит src (содержимое шаблона) с переменными vars.
|
||
// name используется только для сообщений об ошибках парсинга.
|
||
func Render(name, src string, vars map[string]interface{}) (string, error) {
|
||
tmpl, err := template.New(name).
|
||
Funcs(sprig.FuncMap()).
|
||
Funcs(CustomFuncs()).
|
||
Option("missingkey=error"). // опечатка в имени переменной — ошибка, а не пустая строка
|
||
Parse(src)
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
|
||
var buf strings.Builder
|
||
if err := tmpl.Execute(&buf, vars); err != nil {
|
||
return "", err
|
||
}
|
||
return buf.String(), nil
|
||
}
|