github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/util/reader.go (about)

     1  package util
     2  
     3  import (
     4  	"io"
     5  )
     6  
     7  type sizeReader struct {
     8  	size int64
     9  	r    io.Reader
    10  }
    11  
    12  type SizeReader interface {
    13  	io.Reader
    14  	Size() int64
    15  }
    16  
    17  // NewSizeReader returns an io.Reader that will have the number of bytes
    18  // read from r available.
    19  func NewSizeReader(r io.Reader) SizeReader {
    20  	return &sizeReader{r: r}
    21  }
    22  
    23  func (v *sizeReader) Read(p []byte) (int, error) {
    24  	n, err := v.r.Read(p)
    25  	v.size += int64(n)
    26  	return n, err
    27  }
    28  
    29  func (v *sizeReader) Size() int64 {
    30  	return v.size
    31  }