home/internal/theme/repository/fs/fs_theme.go

38 lines
834 B
Go

package fs
import (
"context"
"fmt"
"html/template"
"io/fs"
"source.toby3d.me/toby3d/home/internal/templateutil"
"source.toby3d.me/toby3d/home/internal/theme"
)
type fileSystemThemeRepository struct {
dir fs.FS
funcMap template.FuncMap
}
func NewFileSystemThemeRepository(dir fs.FS) (theme.Repository, error) {
funcMap, err := templateutil.New(dir)
if err != nil {
return nil, fmt.Errorf("cannot setup template.FuncMap for theme templates: %w", err)
}
return &fileSystemThemeRepository{
dir: dir,
funcMap: funcMap,
}, nil
}
func (repo *fileSystemThemeRepository) Get(ctx context.Context) (*template.Template, error) {
tpl, err := template.New("").Funcs(repo.funcMap).ParseFS(repo.dir, "*.html")
if err != nil {
return nil, fmt.Errorf("cannot find baseof template: %w", err)
}
return tpl, nil
}