| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- package wrappers
-
- import (
- "bytes"
-
- "github.com/juju/errors"
- )
-
- type BufferedReader struct {
- Buffer *bytes.Buffer
- }
-
- var (
- BufferedReaderContinue = errors.New("Please continue reading")
- )
-
- func (b *BufferedReader) BufferedRead(p []byte, callback func() error) (int, error) {
- if b.Buffer.Len() > 0 {
- return b.flush(p)
- }
- if err := callback(); err != nil {
- return 0, err
- }
- return b.flush(p)
- }
-
- func (b *BufferedReader) flush(p []byte) (int, error) {
- if b.Buffer.Len() <= len(p) {
- sizeToReturn := b.Buffer.Len()
- copy(p, b.Buffer.Bytes())
- b.Buffer.Reset()
- return sizeToReturn, nil
- }
-
- return b.Buffer.Read(p)
- }
-
- func NewBufferedReader() BufferedReader {
- return BufferedReader{Buffer: &bytes.Buffer{}}
- }
|