cfgen/parse_templates.go
2022-09-18 19:39:45 +02:00

59 lines
1.1 KiB
Go

package main
import (
"os"
"path/filepath"
"strings"
"text/template"
)
func ParseTemplates(tmpl *template.Template, path string) (map[string]*template.Template, error) {
tmplMap := map[string]*template.Template{}
err := parseTemplates(tmpl, tmplMap, path, path)
if err != nil {
return nil, err
}
return tmplMap, nil
}
func parseTemplates(tmpl *template.Template, tmplMap map[string]*template.Template, path string, trimPrefix string) error {
var err error
dirEntries, err := os.ReadDir(path)
if err != nil {
return err
}
for _, dirEntry := range dirEntries {
entryPath := filepath.Join(path, dirEntry.Name())
if dirEntry.IsDir() {
err = parseTemplates(tmpl, tmplMap, entryPath, trimPrefix)
if err != nil {
return err
}
continue
}
data, err := ReadFileString(entryPath)
if err != nil {
return err
}
tmplName := filepath.Clean(strings.TrimPrefix(entryPath, trimPrefix))
if tmplName[0] == '/' {
tmplName = tmplName[1:]
}
tmpl, err = tmpl.New(tmplName).Parse(string(data))
if err != nil {
return ErrInvalidTemplateSyntax.Wrap(err, tmplName)
}
tmplMap[tmplName] = tmpl
}
return nil
}