Codebase list golang-github-vbauerster-mpb / ccfb502
don't expose proxy reader struct Vladimir Bauer 7 years ago
2 changed file(s) with 13 addition(s) and 15 deletion(s). Raw diff Collapse all Expand all
144144
145145 // ProxyReader allows progress tracking against provided io.Reader.
146146 func (b *Bar) ProxyReader(r io.Reader) io.Reader {
147 return &Reader{
148 Reader: r,
149 bar: b,
150 }
147 return &proxyReader{r, b}
151148 }
152149
153150 // ID returs id of the bar.
44 "time"
55 )
66
7 // Reader is io.Reader wrapper, for proxy read bytes
8 type Reader struct {
9 io.Reader
10 bar *Bar
7 // proxyReader is io.Reader wrapper, for proxy read bytes
8 type proxyReader struct {
9 r io.Reader
10 b *Bar
1111 }
1212
13 func (r *Reader) Read(p []byte) (int, error) {
13 func (s *proxyReader) Read(p []byte) (n int, err error) {
1414 start := time.Now()
15 n, err := r.Reader.Read(p)
16 r.bar.IncrBy(n, time.Since(start))
17 return n, err
15 n, err = s.r.Read(p)
16 if n > 0 {
17 s.b.IncrBy(n, time.Since(start))
18 }
19 return
1820 }
1921
20 // Close the reader when it implements io.Closer
21 func (r *Reader) Close() error {
22 if closer, ok := r.Reader.(io.Closer); ok {
22 func (s *proxyReader) Close() error {
23 if closer, ok := s.r.(io.Closer); ok {
2324 return closer.Close()
2425 }
2526 return nil