yt-gen-app/lib/template.go

83 lines
1.5 KiB
Go
Raw Normal View History

2023-06-23 14:54:47 +03:00
package lib
import (
"bufio"
"bytes"
"embed"
"log"
"os"
"strings"
"text/template"
)
//go:embed tmpl/*
var content embed.FS
var funcMap = template.FuncMap{
"fieldName": fieldName,
}
func fieldName(name string) (res string) {
res = strings.Trim(name, " ")
if res == "" {
log.Fatal("Shoudl be set name for field")
}
asRunes := []rune(res)
asRunes[0] = []rune(strings.ToUpper(string([]rune(res)[0])))[0]
res = string(asRunes)
i := strings.Index(res, "_")
for i != -1 {
asRunes := []rune(res)
if i >= len(res) {
break
}
asRunes[i+1] = []rune(strings.ToUpper(string(asRunes[i+1])))[0]
asRunes = append(asRunes[:i-1], asRunes[i+1:]...)
res = string(asRunes)
i = strings.Index(res, "_")
}
return
}
func WriteTmplFile(filename string, outname string) error {
if buff, err := content.ReadFile(filename); err != nil {
return err
} else {
if err = os.WriteFile(outname, buff, 0755); err != nil {
return err
}
}
return nil
}
// Использование шаблона
func PrepareTmplFile(filename string, data interface{}, outname string) (err error) {
var (
buff []byte
)
if buff, err = content.ReadFile(filename); err != nil {
return err
}
var (
tmp string
tmpl *template.Template
)
if tmp, err = RandomHex(4); err != nil {
return err
}
if tmpl, err = template.New(tmp).Funcs(funcMap).Parse(string(buff)); err != nil {
return err
}
var b bytes.Buffer
w := bufio.NewWriter(&b)
if err = tmpl.Execute(w, data); err != nil {
return err
}
w.Flush()
os.WriteFile(outname, b.Bytes(), 0755)
return
}