mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-12-15 02:10:05 +01:00
37 lines
719 B
Go
37 lines
719 B
Go
|
package rifs
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
)
|
||
|
|
||
|
// ReadCounter proxies read requests and maintains a counter of bytes read.
|
||
|
type ReadCounter struct {
|
||
|
r io.Reader
|
||
|
counter int
|
||
|
}
|
||
|
|
||
|
// NewReadCounter returns a new `ReadCounter` struct wrapping a `Reader`.
|
||
|
func NewReadCounter(r io.Reader) *ReadCounter {
|
||
|
return &ReadCounter{
|
||
|
r: r,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Count returns the total number of bytes read.
|
||
|
func (rc *ReadCounter) Count() int {
|
||
|
return rc.counter
|
||
|
}
|
||
|
|
||
|
// Reset resets the counter to zero.
|
||
|
func (rc *ReadCounter) Reset() {
|
||
|
rc.counter = 0
|
||
|
}
|
||
|
|
||
|
// Read forwards a read to the underlying `Reader` while bumping the counter.
|
||
|
func (rc *ReadCounter) Read(b []byte) (n int, err error) {
|
||
|
n, err = rc.r.Read(b)
|
||
|
rc.counter += n
|
||
|
|
||
|
return n, err
|
||
|
}
|