pkg/utils/iocloser.go
Rama master · réplica de lectura del repositorio original.
package utils
import "io"
type readCloser struct {
io.Reader
c func() error
}
type writeCloser struct {
io.Writer
c func() error
}
// ReadCloser returns an io.ReadCloser from a io.Reader and a close method.
func ReadCloser(r io.Reader, c func() error) io.ReadCloser {
return &readCloser{r, c}
}
func (r *readCloser) Read(p []byte) (int, error) {
return r.Reader.Read(p)
}
func (r *readCloser) Close() error {
if r.c != nil {
return r.c()
}
return nil
}
// WriteCloser returns an io.WriteCloser from a io.Writer and a close method.
func WriteCloser(w io.Writer, c func() error) io.WriteCloser {
return &writeCloser{w, c}
}
func (w *writeCloser) Read(p []byte) (int, error) {
return w.Writer.Write(p)
}
func (w *writeCloser) Close() error {
if w.c != nil {
return w.c()
}
return nil
}