extract multiwritecloser
2 files changed, 37 insertions(+), 26 deletions(-)
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.go → internal/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) {