util.go 615 B

123456789101112131415161718192021222324252627282930313233
  1. package resp
  2. import (
  3. "io"
  4. )
  5. // LenReader adds an additional method to io.Reader, returning how many bytes
  6. // are left till be read until an io.EOF is reached.
  7. type LenReader interface {
  8. io.Reader
  9. Len() int64
  10. }
  11. type lenReader struct {
  12. r io.Reader
  13. l int64
  14. }
  15. // NewLenReader wraps an existing io.Reader whose length is known so that it
  16. // implements LenReader.
  17. func NewLenReader(r io.Reader, l int64) LenReader {
  18. return &lenReader{r: r, l: l}
  19. }
  20. func (lr *lenReader) Read(b []byte) (int, error) {
  21. n, err := lr.r.Read(b)
  22. lr.l -= int64(n)
  23. return n, err
  24. }
  25. func (lr *lenReader) Len() int64 {
  26. return lr.l
  27. }