54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
// internal/templating/embedded.go
|
|
package templating
|
|
|
|
import (
|
|
"fmt"
|
|
"io/fs"
|
|
"os"
|
|
"path/filepath"
|
|
"sunhpc/data/tmpls"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// ListEmbeddedTemplates 返回所有内置模板名称(不含路径和扩展名)
|
|
func ListEmbeddedTemplates() ([]string, error) {
|
|
entries, err := fs.ReadDir(tmpls.ConfigFS, ".")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var names []string
|
|
for _, entry := range entries {
|
|
if entry.IsDir() || filepath.Ext(entry.Name()) != ".yaml" {
|
|
continue
|
|
}
|
|
names = append(names, entry.Name()[:len(entry.Name())-5]) // 去掉 .yaml
|
|
}
|
|
return names, nil
|
|
}
|
|
|
|
// LoadEmbeddedTemplate 从二进制加载内置模板
|
|
func LoadEmbeddedTemplate(name string) (*Template, error) {
|
|
data, err := tmpls.ConfigFS.ReadFile(name + ".yaml")
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return nil, fmt.Errorf("内置模板 '%s' 不存在", name)
|
|
}
|
|
return nil, err
|
|
}
|
|
var tmpl Template
|
|
if err := yaml.Unmarshal(data, &tmpl); err != nil {
|
|
return nil, fmt.Errorf("解析内置模板失败: %w", err)
|
|
}
|
|
return &tmpl, nil
|
|
}
|
|
|
|
// DumpEmbeddedTemplateToFile 将内置模板写入文件
|
|
func DumpEmbeddedTemplateToFile(name, outputPath string) error {
|
|
data, err := tmpls.ConfigFS.ReadFile(name + ".yaml")
|
|
if err != nil {
|
|
return fmt.Errorf("找不到内置模板 '%s': %w", name, err)
|
|
}
|
|
return os.WriteFile(outputPath, data, 0644)
|
|
}
|