Files
sunhpc-go/pkg/templating/embedded.go
2026-02-20 18:44:43 +08:00

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