mod checked;
mod unchecked;
pub use checked::*;
pub use unchecked::*;
pub trait Reader<'a>: CheckedReader + UncheckedReader<'a> {
#[inline(always)]
fn read<T: ReadData<'a>>(&mut self) -> crate::Result<T> {
T::read(self)
}
fn get_slice(&self) -> &'a [u8];
}
impl<'a> Reader<'a> for &'a [u8] {
fn get_slice(&self) -> &'a [u8] {
self
}
}
pub trait ReadData<'a>: Sized {
fn read(reader: &mut impl Reader<'a>) -> crate::Result<Self>;
}
impl<'a, T> ReadData<'a> for T
where
T: ReadDataChecked,
{
fn read(reader: &mut impl Reader<'a>) -> crate::Result<Self> {
T::read_checked(reader)
}
}