all repos — homestead @ bd77f727dca007014f42269b9dd48b92df28f657

Code for my website

extract multiwritecloser

Alan Pearce
commit

bd77f727dca007014f42269b9dd48b92df28f657

parent

2277132a99c598cbc8d3ed7a6ddc30c176848206

2 files changed, 37 insertions(+), 26 deletions(-)

jump to
A internal/multibuf/writecloser.go
@@ -0,0 +1,34 @@
+package multibuf + +import ( + "io" +) + +type WriteCloser struct { + writers []io.WriteCloser + io.Writer +} + +func NewWriteCloser(writers ...io.WriteCloser) *WriteCloser { + ws := make([]io.Writer, len(writers)) + for i, w := range writers { + ws[i] = io.Writer(w) + } + + return &WriteCloser{ + writers: writers, + Writer: io.MultiWriter(ws...), + } +} + +func (mw *WriteCloser) Close() error { + var lastErr error + for _, w := range mw.writers { + err := w.Close() + if err != nil { + lastErr = err + } + } + + return lastErr +}
M internal/storage/files/writer.gointernal/storage/files/writer.go
@@ -8,6 +8,7 @@ "path/filepath"
"time" "go.alanpearce.eu/website/internal/buffer" + "go.alanpearce.eu/website/internal/multibuf" "go.alanpearce.eu/website/internal/storage" "go.alanpearce.eu/x/log"
@@ -79,27 +80,6 @@
return nil } -type MultiWriteCloser struct { - writers []io.WriteCloser - multiWriter io.Writer -} - -func (mw *MultiWriteCloser) Write(p []byte) (n int, err error) { - return mw.multiWriter.Write(p) -} - -func (mw *MultiWriteCloser) Close() error { - var lastErr error - for _, w := range mw.writers { - err := w.Close() - if err != nil { - lastErr = err - } - } - - return lastErr -} - func openFileWrite(filename string) (*os.File, error) { return os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) }
@@ -124,7 +104,7 @@
return brotli.NewWriterLevel(f, brotliLevel), nil } -func multiOpenFile(filename string) (*MultiWriteCloser, error) { +func multiOpenFile(filename string) (*multibuf.WriteCloser, error) { r, err := openFileWrite(filename) if err != nil { return nil, err
@@ -138,10 +118,7 @@ if err != nil {
return nil, err } - return &MultiWriteCloser{ - writers: []io.WriteCloser{r, gz, br}, - multiWriter: io.MultiWriter(r, gz, br), - }, nil + return multibuf.NewWriteCloser(r, gz, br), nil } func (f *Files) OpenFileAndVariants(filename string) (io.WriteCloser, error) {