use core::error;
use core::fmt::{Debug, Display, Formatter};
use crate::error::{LengthExceedsAvailableSpaceError, UnexpectedBufferEndError};
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub enum ParseIpv6Error {
UnexpectedBufferEnd(UnexpectedBufferEndError),
VersionHeaderValueNotSix,
}
impl From<UnexpectedBufferEndError> for ParseIpv6Error {
fn from(value: UnexpectedBufferEndError) -> Self {
Self::UnexpectedBufferEnd(value)
}
}
impl From<LengthExceedsAvailableSpaceError> for ParseIpv6Error {
#[inline]
fn from(value: LengthExceedsAvailableSpaceError) -> Self {
Self::UnexpectedBufferEnd(UnexpectedBufferEndError {
expected_length: value.required_space,
actual_length: value.available_space,
})
}
}
impl Display for ParseIpv6Error {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
match self {
Self::UnexpectedBufferEnd(err) => {
write!(f, "{err}")
}
Self::VersionHeaderValueNotSix => {
write!(f, "Version is not 6")
}
}
}
}
impl error::Error for ParseIpv6Error {}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub enum SetPayloadLengthError {
LengthExceedsAvailableSpace(LengthExceedsAvailableSpaceError),
CannotCutUpperLayerHeader,
}
impl From<LengthExceedsAvailableSpaceError> for SetPayloadLengthError {
fn from(value: LengthExceedsAvailableSpaceError) -> Self {
Self::LengthExceedsAvailableSpace(value)
}
}
impl Display for SetPayloadLengthError {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
match self {
Self::LengthExceedsAvailableSpace(err) => {
write!(f, "{err}")
}
Self::CannotCutUpperLayerHeader => {
write!(
f,
"Provided length would cut off already parsed upper layer"
)
}
}
}
}
impl error::Error for SetPayloadLengthError {}