oss/progress.go (30 lines of code) (raw):

package oss import "io" type ProgressFunc func(increment, transferred, total int64) type progressTracker struct { pr ProgressFunc written int64 lwritten int64 // last written total int64 } // NewProgress NewRequestProgress creates a tracker with progress reporting func NewProgress(pr ProgressFunc, total int64) io.Writer { return &progressTracker{ pr: pr, written: 0, lwritten: 0, total: total, } } func (p *progressTracker) Write(b []byte) (n int, err error) { n = len(b) p.written += int64(n) // Invokes the user's callback method to report progress if p.written > p.lwritten { p.pr(int64(n), p.written, p.total) } return } func (p *progressTracker) Reset() { p.lwritten = p.written p.written = 0 } var _ RequestBodyTracker = (*progressTracker)(nil)