// 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) }