func Varuint1(r Reader) (bool, int, error) {
	var n int
	b, err := r.ReadByte()
	if err != nil {
		return false, n, err
	}
	n++
	if b > 1 {
		return false, n, moduleError("varuint1 value is too large")
	}
	return b == 1, n, nil
}
Varuint1 reads a bit (in a byte).  The number of bytes read is also returned
(0 or 1).
package binary
import (
	"encoding/binary"
	"io"
)
type Reader interface {
	io.Reader
	io.ByteScanner
}
func Uint32(r Reader) (uint32, int, error) {
	b := make([]byte, 4)
	n, err := io.ReadFull(r, b)
	if err != nil {
		return 0, n, err
	}
	return binary.LittleEndian.Uint32(b), n, nil
}
func Uint64(r Reader) (uint64, int, error) {
	b := make([]byte, 8)
	n, err := io.ReadFull(r, b)
	if err != nil {
		return 0, n, err
	}
	return binary.LittleEndian.Uint64(b), n, nil
}