pub trait ByteReader<T> {
fn read_i8(&mut self) -> Result<(i32, Range)>;
fn read_i16<B: ByteOrder>(&mut self) -> Result<(i32, Range)>;
fn read_i32<B: ByteOrder>(&mut self) -> Result<(i32, Range)>;
fn read_u8(&mut self) -> Result<(u32, Range)>;
fn read_u16<B: ByteOrder>(&mut self) -> Result<(u32, Range)>;
fn read_u32<B: ByteOrder>(&mut self) -> Result<(u32, Range)>;
fn read_f32<B: ByteOrder>(&mut self) -> Result<(f64, Range)>;
fn read_f64<B: ByteOrder>(&mut self) -> Result<(f64, Range)>;
fn read_slice(&mut self, len: usize) -> Result<(&'static [u8], Range)>;
fn read_slice_to_end(&mut self) -> Result<(&'static [u8], Range)>;
}