Skip to content

Commit 722763b

Browse files
committed
Implement io.Seeker in progress.Reader
1 parent e72a5f4 commit 722763b

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

progress/reader.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package progress
22

3-
import "io"
3+
import (
4+
"fmt"
5+
"io"
6+
)
47

58
// Reader is an [io.ReadCloser] that reports the number of bytes read from it
69
// via a callback. The callback is called at most every "updateInterval" bytes.
@@ -51,4 +54,19 @@ func (r *Reader) Close() error {
5154
return nil
5255
}
5356

54-
var _ io.ReadCloser = (*Reader)(nil)
57+
func (r *Reader) Seek(offset int64, whence int) (int64, error) {
58+
seeker, ok := r.inner.(io.ReadSeeker)
59+
if !ok {
60+
return 0, fmt.Errorf("progress.Reader: source reader (%T) is not an io.ReadSeeker", r.inner)
61+
}
62+
n, err := seeker.Seek(offset, whence)
63+
if err != nil {
64+
return 0, err
65+
}
66+
r.readBytes = int(n)
67+
r.progressFn(r.readBytes)
68+
r.lastUpdate = r.readBytes
69+
return n, nil
70+
}
71+
72+
var _ io.ReadSeekCloser = (*Reader)(nil)

0 commit comments

Comments
 (0)