From 1e09d14210c24f6528ed2d88b2684e2213c7b4d8 Mon Sep 17 00:00:00 2001 From: cubixle <4376523+cubixle@users.noreply.github.com> Date: Wed, 3 Aug 2022 15:39:36 +0100 Subject: [PATCH] start of adding html renderer --- renderer/renderer.go | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 renderer/renderer.go diff --git a/renderer/renderer.go b/renderer/renderer.go new file mode 100644 index 0000000..d5aa57d --- /dev/null +++ b/renderer/renderer.go @@ -0,0 +1,46 @@ +package renderer + +import ( + "fmt" + "html/template" + "io" + "io/fs" +) + +type Renderer interface { + // Render will write the template to given the given writer. + // Will return an error if we can't write to the writer or we can + // can't find the template. + Render(w io.Writer, templateName string, data interface{}) error +} + +type ErrTemplateNotFound struct { + Err error + Name string +} + +func (e *ErrTemplateNotFound) Error() string { + return fmt.Sprintf("unable to find the template '%s', err: %v", e.Name, e.Err) +} + +type ErrFailedToWrite struct { + Err error +} + +func (e *ErrFailedToWrite) Error() string { + return fmt.Sprintf("failed to write template, err: %v", e.Err) +} + +type HTMLRender struct { + templates *template.Template +} + +func New(fs fs.FS, pattern string) (*HTMLRender, error) { + return &HTMLRender{ + templates: template.Must(template.ParseFS(fs, pattern)), + }, nil +} + +func (h *HTMLRender) Render(w io.Writer, templateName string, data interface{}) error { + return h.templates.ExecuteTemplate(w, templateName, data) +}