package template import ( "bytes" "fmt" "html/template" "io/fs" ) // Engine is a template engine type Engine struct { templates *template.Template } // Render renders the template with the given name and data func (e *Engine) Render(name string, data any) ([]byte, error) { var buf bytes.Buffer if err := e.templates.ExecuteTemplate(&buf, name, data); err != nil { return nil, fmt.Errorf("failed to execute template: %w", err) } return buf.Bytes(), nil } // NewTemplateEngine creates a new template engine from the given templates func NewEngine(templates fs.FS) (*Engine, error) { tmpls, err := template.ParseFS(templates, "*.html", "**/*.html") if err != nil { return nil, fmt.Errorf("failed to parse templates: %w", err) } return &Engine{ templates: tmpls, }, nil }