重构架构
This commit is contained in:
53
pkg/templating/embedded.go
Normal file
53
pkg/templating/embedded.go
Normal file
@@ -0,0 +1,53 @@
|
||||
// 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)
|
||||
}
|
||||
Reference in New Issue
Block a user