github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/utils/iocloser.go (about) 1 package utils 2 3 import "io" 4 5 type readCloser struct { 6 io.Reader 7 c func() error 8 } 9 10 type writeCloser struct { 11 io.Writer 12 c func() error 13 } 14 15 // ReadCloser returns an io.ReadCloser from a io.Reader and a close method. 16 func ReadCloser(r io.Reader, c func() error) io.ReadCloser { 17 return &readCloser{r, c} 18 } 19 20 func (r *readCloser) Read(p []byte) (int, error) { 21 return r.Reader.Read(p) 22 } 23 24 func (r *readCloser) Close() error { 25 if r.c != nil { 26 return r.c() 27 } 28 return nil 29 } 30 31 // WriteCloser returns an io.WriteCloser from a io.Writer and a close method. 32 func WriteCloser(w io.Writer, c func() error) io.WriteCloser { 33 return &writeCloser{w, c} 34 } 35 36 func (w *writeCloser) Read(p []byte) (int, error) { 37 return w.Writer.Write(p) 38 } 39 40 func (w *writeCloser) Close() error { 41 if w.c != nil { 42 return w.c() 43 } 44 return nil 45 }