Files
2025-10-03 00:54:22 +08:00

60 lines
1.3 KiB
Go

package template
import (
"fmt"
"strings"
"text/template"
)
type Template struct {
GlobTemplate *template.Template
}
var DefaultFuncMap = template.FuncMap{
"hd": hd,
"title": strings.Title,
"join": strings.Join,
"list": func(strs []string) string { return strings.Join(strs, ",") },
"cmd2func": func(str string) string {
splits := strings.Split(str, "/")
return splits[len(splits)-1]
},
"exports": func(port []any) string {
var out []string
for _, p := range port {
p2 := p.(map[string]interface{})
splits := strings.Split(p2["Cmd"].(string), "/")
funcName := splits[len(splits)-1]
out = append(out, fmt.Sprintf("%s/5", funcName))
}
return strings.Join(out, ",")
},
}
func hd(str []string) string {
return str[0]
}
func NewTemplate() *Template {
return &Template{}
}
func (t *Template) ParseGlob(pattern string) error {
parse, err := template.New("").
Funcs(DefaultFuncMap).ParseGlob(pattern)
if err != nil {
return err
}
t.GlobTemplate = template.Must(parse, nil)
return nil
}
func (t *Template) ExecuteTemplate(templateName2 string, data interface{}) (string, error) {
var buf strings.Builder
err := t.GlobTemplate.ExecuteTemplate(&buf, templateName2, data)
if err != nil {
return "", err
}
return buf.String(), nil
}