wal-g
1package utility
2
3import (
4"io"
5
6"github.com/pkg/errors"
7)
8
9// CascadeWriteCloser bundles multiple closures
10// into one function. Calling Close() will close the
11// main and underlying writers.
12type CascadeWriteCloser struct {
13io.WriteCloser
14Underlying io.Closer
15}
16
17// Close returns the first encountered error from closing
18// main or underlying writer.
19func (cc *CascadeWriteCloser) Close() error {
20err := cc.WriteCloser.Close()
21if err != nil {
22return errors.Wrap(err, "Close: failed to close main writer")
23}
24err = cc.Underlying.Close()
25return errors.Wrap(err, "Close: failed to close underlying writer")
26}
27
28// CascadeReadCloser bundles multiple closures
29// into one function. Calling Close() will close the
30// main and underlying writers.
31type CascadeReadCloser struct {
32io.ReadCloser
33Underlying io.Closer
34}
35
36// Close returns the first encountered error from closing
37// main or underlying writer.
38func (cc *CascadeReadCloser) Close() error {
39err := cc.ReadCloser.Close()
40if err != nil {
41return errors.Wrap(err, "Close: failed to close main reader")
42}
43err = cc.Underlying.Close()
44return errors.Wrap(err, "Close: failed to close underlying reader")
45}
46