remove buffers in file writer
1 file changed, 13 insertions(+), 9 deletions(-)
changed files
M domain/web/templates/layout.go → domain/web/templates/layout.go
@@ -50,7 +50,7 @@ return g.Attr(k, v) // can't inline this because it uses ...value, grr }) } -func Layout(site SiteSettings, page PageSettings, children ...g.Node) g.Node { +func Layout(site SiteSettings, page PageSettings, children ...g.Node) g.NodeWriter { return DoctypeHTML(FormattedDocument( HTML( Lang(site.Language),@@ -115,8 +115,8 @@ g.Text(item.Name), ) } -func FormattedDocument(doc g.Node) g.Node { - return g.NodeFunc(func(w io.Writer) error { +func FormattedDocument(doc g.Node) g.NodeWriter { + return g.NodeWriterFunc(func(w io.Writer) (int64, error) { pr, pw := io.Pipe() defer pr.Close()@@ -125,19 +125,23 @@ pw.CloseWithError(doc.Render(pw)) }() if err := htmlformat.Document(w, pr); err != nil { - return fault.Wrap(err) + return 0, fault.Wrap(err) } - return nil + return 0, nil }) } -func DoctypeHTML(sibling g.Node) g.Node { - return g.NodeFunc(func(w io.Writer) error { +func DoctypeHTML(sibling g.Node) g.NodeWriter { + return g.NodeWriterFunc(func(w io.Writer) (int64, error) { if _, err := w.Write([]byte("<!doctype html>\n")); err != nil { - return err + return 0, err } - return sibling.Render(w) + if sibling, ok := sibling.(g.NodeWriter); ok { + return sibling.WriteTo(w) + } + + return 0, sibling.Render(w) }) }