wireparse 0.1.0

Library for reading and writing ethernet and other related protocals.
Documentation
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)
    }
}