code: func (r *reader) Done(err error) {
  	q := readerReport{
  		t:    time.Now(),
  		pos:  r.pos,
  		size: r.size,
  		bps:  &r.bps,
  		err:  err,
  	}
  
  	select {
  	case r.ch <- q:
  		close(r.ch)
  	case <-r.ctx.Done():
  	}
  }
docs: // Done marks the progress reader as done, optionally including an error in the
  // progress report. After sending it, the underlying channel is closed.