#[cfg(not(feature = "std"))]
use alloc::prelude::*;
use byteorder::ByteOrder;
use core::result;
pub type Result<T> = result::Result<T, String>;
pub trait Reader {
fn read(&mut self, buf: &mut [u8]) -> Result<usize>;
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>;
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>;
fn consume(&mut self, amt: usize);
}
pub trait ReadBytesExt: Reader {
#[inline]
fn read_u8(&mut self) -> Result<u8> {
let mut buf = [0; 1];
self.read_exact(&mut buf)?;
Ok(buf[0])
}
#[inline]
fn read_u16<T: ByteOrder>(&mut self) -> Result<u16> {
let mut buf = [0; 2];
self.read_exact(&mut buf)?;
Ok(T::read_u16(&buf))
}
#[inline]
fn read_u32<T: ByteOrder>(&mut self) -> Result<u32> {
let mut buf = [0; 4];
self.read_exact(&mut buf)?;
Ok(T::read_u32(&buf))
}
}
impl<R: Reader + ?Sized> ReadBytesExt for R {}