storj.io/uplink@v1.13.0/private/storage/streams/size.go (about) 1 // Copyright (C) 2019 Storj Labs, Inc. 2 // See LICENSE for copying information. 3 4 package streams 5 6 import ( 7 "io" 8 ) 9 10 // SizedReader allows to check the total number of bytes read so far. 11 type SizedReader struct { 12 r io.Reader 13 size int64 14 } 15 16 // SizeReader create a new instance of SizedReader. 17 func SizeReader(r io.Reader) *SizedReader { 18 return &SizedReader{r: r} 19 } 20 21 // Read implements io.Reader.Read. 22 func (r *SizedReader) Read(p []byte) (n int, err error) { 23 n, err = r.r.Read(p) 24 r.size += int64(n) 25 return n, err 26 } 27 28 // Size returns the total number of bytes read so far. 29 func (r *SizedReader) Size() int64 { return r.size }