mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-12-14 18:02:17 +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
|
|
}
|