36 lines
789 B
Go
36 lines
789 B
Go
package template
|
|
|
|
import (
|
|
"bytes"
|
|
"embed"
|
|
"fmt"
|
|
"html/template"
|
|
)
|
|
|
|
// 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 embed.FS) (*Engine, error) {
|
|
tmpls, err := template.ParseFS(templates, "**/*.html")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to parse templates: %w", err)
|
|
}
|
|
|
|
return &Engine{
|
|
templates: tmpls,
|
|
}, nil
|
|
}
|