// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.

package streams

import (
	"io"
)

// SizedReader allows to check the total number of bytes read so far.
type SizedReader struct {
	r    io.Reader
	size int64
}

// SizeReader create a new instance of SizedReader.
func SizeReader(r io.Reader) *SizedReader {
	return &SizedReader{r: r}
}

// Read implements io.Reader.Read.
func (r *SizedReader) Read(p []byte) (n int, err error) {
	n, err = r.r.Read(p)
	r.size += int64(n)
	return n, err
}

// Size returns the total number of bytes read so far.
func (r *SizedReader) Size() int64 { return r.size }
