Skip to content

Instantly share code, notes, and snippets.

@ninedraft
Created July 15, 2020 08:12
Show Gist options
  • Save ninedraft/91e5a01097d4f72d9a7d3f869b5dab79 to your computer and use it in GitHub Desktop.
Save ninedraft/91e5a01097d4f72d9a7d3f869b5dab79 to your computer and use it in GitHub Desktop.
Writer proxy error monad for Golang
package wr
import "io"
type Wr struct {
err error
written int64
w io.Writer
}
func NewWr(w io.Writer) *Wr {
if wr, isWr := w.(*Wr); isWr {
return wr
}
return &Wr{w: w}
}
func (wr *Wr) Write(data []byte) (int, error) {
if wr.Failed() {
return 0, wr.err
}
var n, err = wr.w.Write(data)
wr.err = err
wr.written += int64(n)
return n, err
}
func (wr *Wr) Written() int64 { return wr.written }
func (wr *Wr) Err() error { return wr.err }
func (wr *Wr) Failed() bool { return wr.err != nil }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment