package byteutil

import "bytes"

// Reader wraps a bytes.Reader{} to provide Rewind() capabilities.
type Reader struct {
	B []byte
	bytes.Reader
}

// NewReader returns a new Reader{} instance reset to b.
func NewReader(b []byte) *Reader {
	r := &Reader{}
	r.Reset(b)
	return r
}

// Reset resets the Reader{} to be reading from b and sets Reader{}.B.
func (r *Reader) Reset(b []byte) {
	r.B = b
	r.Rewind()
}

// Rewind resets the Reader{} to be reading from the start of Reader{}.B.
func (r *Reader) Rewind() {
	r.Reader.Reset(r.B)
}

// ReadNopCloser wraps a Reader{} to provide nop close method.
type ReadNopCloser struct {
	Reader
}

func (*ReadNopCloser) Close() error {
	return nil
}