wal-g

Форк
0
/
cascade_closer.go 
45 строк · 1.1 Кб
1
package utility
2

3
import (
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.
12
type CascadeWriteCloser struct {
13
	io.WriteCloser
14
	Underlying io.Closer
15
}
16

17
// Close returns the first encountered error from closing
18
// main or underlying writer.
19
func (cc *CascadeWriteCloser) Close() error {
20
	err := cc.WriteCloser.Close()
21
	if err != nil {
22
		return errors.Wrap(err, "Close: failed to close main writer")
23
	}
24
	err = cc.Underlying.Close()
25
	return 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.
31
type CascadeReadCloser struct {
32
	io.ReadCloser
33
	Underlying io.Closer
34
}
35

36
// Close returns the first encountered error from closing
37
// main or underlying writer.
38
func (cc *CascadeReadCloser) Close() error {
39
	err := cc.ReadCloser.Close()
40
	if err != nil {
41
		return errors.Wrap(err, "Close: failed to close main reader")
42
	}
43
	err = cc.Underlying.Close()
44
	return errors.Wrap(err, "Close: failed to close underlying reader")
45
}
46

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.