Skip to content

Commit

Permalink
Merge pull request #6 from fossil-engineering/feature/add-reader-writ…
Browse files Browse the repository at this point in the history
…e-error

Define errors for Reader and Write functions.
  • Loading branch information
thrawn01 committed Mar 3, 2023
2 parents 6826515 + a1cd2b3 commit 035c119
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
16 changes: 13 additions & 3 deletions buffer.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,22 @@ package multibuf

import (
"bytes"
"errors"
"fmt"
"io"
"io/ioutil"
"os"
)

var (
// ErrNoDataReady is an error when getting the reader while the data is not
// ready.
ErrNoDataReady = errors.New("mailgun/multibuf: no data ready")
// ErrReaderHasBeenCalled is an error when getting the reader or writing
// while the reader has been called.
ErrReaderHasBeenCalled = errors.New("mailgun/multibuf: reader has been called")
)

// MultiReader provides Read, Close, Seek and Size methods. In addition to that it supports WriterTo interface
// to provide efficient writing schemes, as functions like io.Copy use WriterTo when it's available.
type MultiReader interface {
Expand Down Expand Up @@ -337,7 +347,7 @@ func (w *writerOnce) write(p []byte) (int, error) {
}
switch w.state {
case writerCalledRead:
return 0, fmt.Errorf("can not write after reader has been called")
return 0, ErrReaderHasBeenCalled
case writerInit:
w.mem = &bytes.Buffer{}
w.state = writerMem
Expand Down Expand Up @@ -388,9 +398,9 @@ func (w *writerOnce) initFile() error {
func (w *writerOnce) Reader() (MultiReader, error) {
switch w.state {
case writerInit:
return nil, fmt.Errorf("no data ready")
return nil, ErrNoDataReady
case writerCalledRead:
return nil, fmt.Errorf("reader has been called")
return nil, ErrReaderHasBeenCalled
case writerMem:
w.state = writerCalledRead
return newBuf(w.total, nil, bytes.NewReader(w.mem.Bytes())), nil
Expand Down
6 changes: 3 additions & 3 deletions buffer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,16 +264,16 @@ func TestWriterReaderCalled(t *testing.T) {

// Subsequent calls to write and get reader will fail
_, err = w.Reader()
assert.Error(t, err)
assert.EqualError(t, err, ErrReaderHasBeenCalled.Error())

_, err = w.Write([]byte{1})
assert.Error(t, err)
assert.EqualError(t, err, ErrReaderHasBeenCalled.Error())
}

func TestWriterNoData(t *testing.T) {
w, err := NewWriterOnce()
assert.NoError(t, err)

_, err = w.Reader()
assert.Error(t, err)
assert.EqualError(t, err, ErrNoDataReady.Error())
}

0 comments on commit 035c119

Please sign in to comment.