From 8da5c1f72f84d2bf6fd6486aa2a00c481d20057e Mon Sep 17 00:00:00 2001 From: "Gustavo L de Mello (Guz)" Date: Thu, 9 Jan 2025 10:41:02 -0300 Subject: [PATCH] feat(blogo): implementation of default renderer --- blogo/defaults.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/blogo/defaults.go b/blogo/defaults.go index f626c83..6ec7caf 100644 --- a/blogo/defaults.go +++ b/blogo/defaults.go @@ -1,6 +1,8 @@ package blogo import ( + "errors" + "fmt" "io" "io/fs" ) @@ -28,5 +30,46 @@ func (p *defaultRenderer) Name() string { } func (p *defaultRenderer) Render(f fs.File, w io.Writer) error { + if d, ok := f.(fs.ReadDirFile); ok { + return p.renderDirectory(d, w) + } + + buf := make([]byte, 1024) + for { + n, err := f.Read(buf) + if err != nil && err != io.EOF { + return err + } + + if n == 0 { + break + } + + _, err = w.Write(buf[:n]) + if err != nil { + return err + } + } + + return nil +} + +func (p *defaultRenderer) renderDirectory(f fs.ReadDirFile, w io.Writer) error { + es, err := f.ReadDir(-1) + if err != nil { + return err + } + + for _, e := range es { + s := []byte(fmt.Sprintf("%s", e.Name())) + _, err := w.Write(s) + if err != nil { + return errors.Join( + fmt.Errorf("failed to write directory file list, file %s", e.Name()), + err, + ) + } + } + return nil }