pages-server/utils/teecloser.go
2024-03-26 13:41:12 -05:00

35 lines
642 B
Go

package utils
import "io"
// Edited from https://github.com/jig/teereadcloser
// Under the Mozilla Public License 2.0
func TeeReadCloser(r io.ReadCloser, w io.Writer, onClose func() error) io.ReadCloser {
return &teeReaderCloser{r, w, onClose}
}
type teeReaderCloser struct {
r io.ReadCloser
w io.Writer
onClose func() error
}
func (t *teeReaderCloser) Read(p []byte) (n int, err error) {
n, err = t.r.Read(p)
if n > 0 {
if n, err := t.w.Write(p[:n]); err != nil {
return n, err
}
}
return
}
func (t *teeReaderCloser) Close() error {
err := t.r.Close()
if err != nil {
return err
}
return t.onClose()
}