wal-g
40 строк · 790.0 Байт
1package splitmerge2
3import (4"io"5)
6
7type writeResult struct {8n int9err error10}
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
14type channelWriter struct {15ch chan<- []byte16resultCh <-chan writeResult17}
18
19var _ io.WriteCloser = &channelWriter{}20
21func newChannelWriter(ch chan<- []byte, resultCh <-chan writeResult) io.WriteCloser {22return &channelWriter{23ch: ch,24resultCh: resultCh,25}26}
27
28func (cw *channelWriter) Write(data []byte) (int, error) {29cw.ch <- data30wr, ok := <-cw.resultCh31if !ok {32return 0, io.ErrShortWrite33}34return wr.n, wr.err35}
36
37func (cw *channelWriter) Close() error {38close(cw.ch)39return nil40}
41