github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/command/plugin/shared/progress_bar_proxy_reader.go (about)

     1  package shared
     2  
     3  import (
     4  	"io"
     5  
     6  	pb "gopkg.in/cheggaaa/pb.v1"
     7  )
     8  
     9  // ProgressBarProxyReader wraps a progress bar in a ProxyReader interface.
    10  type ProgressBarProxyReader struct {
    11  	writer io.Writer
    12  	bar    *pb.ProgressBar
    13  }
    14  
    15  func (p ProgressBarProxyReader) Wrap(reader io.Reader) io.ReadCloser {
    16  	return p.bar.NewProxyReader(reader)
    17  }
    18  
    19  func (p *ProgressBarProxyReader) Start(size int64) {
    20  	p.bar = pb.New(int(size)).SetUnits(pb.U_BYTES)
    21  	p.bar.Output = p.writer
    22  	p.bar.Start()
    23  }
    24  
    25  func (p ProgressBarProxyReader) Finish() {
    26  	p.bar.Finish()
    27  }
    28  
    29  func NewProgressBarProxyReader(writer io.Writer) *ProgressBarProxyReader {
    30  	return &ProgressBarProxyReader{writer: writer}
    31  }