package grand

import (
	"io"
)

// MustRead tries to fill p with len(p) bytes from r. If it haven't read enough bytes, then an
// error returns. So if nil error returns, then p must have read len(p) bytes. Otherwise, only
// p[:n] are read from r.
func MustRead(r io.Reader, p []byte) (int, error) {
	n := 0
	for len(p) > 0 {
		m, err := r.Read(p)
		if err != nil {
			return n + m, err
		}
		p = p[m:]
		n += m
	}
	return n, nil
}
