wireparse 0.1.0

Library for reading and writing ethernet and other related protocals.
Documentation
use snafu::prelude::*;

pub type Result<T> = core::result::Result<T, NetpackError>;

#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub enum NetpackError {
    BufferTooSmall {
        provided_size: usize,
        requried_size: usize,
    },
    EthernetFrame(EthFrameError),
    Arp(ArpError),
}

#[derive(Snafu, Clone, Debug, Eq, PartialEq, Hash)]
pub enum EthFrameError {
    #[snafu(display(
        "Not enough bytes. Recieved {}, expected {}",
        provided_size,
        expected_size,
    ))]
    NotEnoughBytes {
        provided_size: usize,
        expected_size: usize,
    },
}

impl From<EthFrameError> for NetpackError {
    fn from(val: EthFrameError) -> Self {
        NetpackError::EthernetFrame(val)
    }
}

#[derive(Snafu, Clone, Debug, Eq, PartialEq, Hash)]
pub enum ArpError {
    #[snafu(display(
        "Not enough bytes to read arp address lengths. Recieved {}, expected {}",
        provided_size,
        expected_size,
    ))]
    NotEnoughBytesForAddrLengths {
        provided_size: usize,
        expected_size: usize,
    },
    #[snafu(display(
        "Not enough bytes to read arp addresses. Recieved {}, expected {}",
        provided_size,
        expected_size,
    ))]
    NotEnoughBytesForAddrs {
        provided_size: usize,
        expected_size: usize,
    },
}

impl From<ArpError> for NetpackError {
    fn from(val: ArpError) -> Self {
        NetpackError::Arp(val)
    }
}