wireparse 0.1.0

Library for reading and writing ethernet and other related protocals.
Documentation
use crate::io::WriteDataUnchecked;

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct MacAddress<'a>(pub &'a [u8; 6]);

impl<'a> crate::io::ReadDataUnchecked<'a> for MacAddress<'a> {
    fn read_unchecked(reader: &mut impl crate::io::UncheckedReader<'a>) -> Self {
        Self(reader.read_fixed_slice_unchecked())
    }
}

impl<'a> WriteDataUnchecked for &MacAddress<'a> {
    fn write_to_unchecked(self, writer: &mut impl crate::io::UncheckedWriter) {
        writer.write_slice_unchecked(self.0)
    }
}

impl<'a> MacAddress<'a> {
    pub const LEN: usize = 6;
}

impl<'a> Default for MacAddress<'a> {
    fn default() -> Self {
        Self(&[0; 6])
    }
}

impl<'a> AsRef<[u8; 6]> for MacAddress<'a> {
    fn as_ref(&self) -> &[u8; 6] {
        self.0
    }
}

impl<'a> core::fmt::Display for MacAddress<'a> {
    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
        write!(
            f,
            "{:#02x}:{:#02x}:{:#02x}:{:#02x}:{:#02x}:{:#02x}:",
            self.0[0], self.0[1], self.0[2], self.0[3], self.0[4], self.0[5],
        )
    }
}