wal-g

Форк
0
/
channelwriter.go 
40 строк · 790.0 Байт
1
package splitmerge
2

3
import (
4
	"io"
5
)
6

7
type writeResult struct {
8
	n   int
9
	err error
10
}
11

12
// channelWriter provider io.WriteCloser interface on top of `ch` chan []byte
13
// i.e. it sends all data written by Write(data) to `ch` channel and waits for response: bytes written & errors
14
type channelWriter struct {
15
	ch       chan<- []byte
16
	resultCh <-chan writeResult
17
}
18

19
var _ io.WriteCloser = &channelWriter{}
20

21
func newChannelWriter(ch chan<- []byte, resultCh <-chan writeResult) io.WriteCloser {
22
	return &channelWriter{
23
		ch:       ch,
24
		resultCh: resultCh,
25
	}
26
}
27

28
func (cw *channelWriter) Write(data []byte) (int, error) {
29
	cw.ch <- data
30
	wr, ok := <-cw.resultCh
31
	if !ok {
32
		return 0, io.ErrShortWrite
33
	}
34
	return wr.n, wr.err
35
}
36

37
func (cw *channelWriter) Close() error {
38
	close(cw.ch)
39
	return nil
40
}
41

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

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

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

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