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 }