This commit is contained in:
2026-02-15 07:18:14 +08:00
parent d7cd899983
commit 8a7bf8a39c
39 changed files with 1578 additions and 2868 deletions

View File

@@ -0,0 +1,54 @@
// internal/templating/embedded.go
package templating
import (
"fmt"
"io/fs"
"os"
"path/filepath"
"sunhpc/tmpls"
"gopkg.in/yaml.v3"
)
// ListEmbeddedTemplates 返回所有内置模板名称(不含路径和扩展名)
func ListEmbeddedTemplates() ([]string, error) {
entries, err := fs.ReadDir(tmpls.FS, ".")
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.FS.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.FS.ReadFile(name + ".yaml")
if err != nil {
return fmt.Errorf("找不到内置模板 '%s': %w", name, err)
}
return os.WriteFile(outputPath, data, 0644)
}