#[derive(Debug, PartialEq, Eq)]
pub enum InitProtocolError<E: std::fmt::Debug + Send> {
Custom(E),
NotHandshake,
NotId,
WrongMagicNumber([u8; 7]),
WrongVersion([u32; 3]),
}
#[derive(Debug, PartialEq, Eq)]
pub enum ProtocolError<E: std::fmt::Debug + Send> {
Custom(E),
Violated,
}
impl<E: std::fmt::Debug + Send> From<ProtocolError<E>> for InitProtocolError<E> {
fn from(err: ProtocolError<E>) -> Self {
match err {
ProtocolError::Custom(e) => InitProtocolError::Custom(e),
ProtocolError::Violated => {
unreachable!("not possible as the Init has raw access to the I/O")
},
}
}
}
impl<E: std::fmt::Debug + Send> core::fmt::Display for InitProtocolError<E> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
InitProtocolError::Custom(e) => write!(f, "custom: {:?}", e),
InitProtocolError::NotHandshake => write!(
f,
"Remote send something which couldn't be parsed as a handshake"
),
InitProtocolError::NotId => {
write!(f, "Remote send something which couldn't be parsed as an id")
},
InitProtocolError::WrongMagicNumber(r) => write!(
f,
"Magic Number doesn't match, remote side send '{:?}' instead of '{:?}'",
&r,
&crate::types::VELOREN_MAGIC_NUMBER
),
InitProtocolError::WrongVersion(r) => write!(
f,
"Network doesn't match, remote side send '{:?}' we are on '{:?}'",
&r,
&crate::types::VELOREN_NETWORK_VERSION
),
}
}
}
impl<E: std::fmt::Debug + Send> core::fmt::Display for ProtocolError<E> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
ProtocolError::Custom(e) => write!(f, "Channel custom close: {:?}", e),
ProtocolError::Violated => write!(f, "Channel protocol violated"),
}
}
}
impl<E: std::fmt::Debug + Send> std::error::Error for InitProtocolError<E> {}
impl<E: std::fmt::Debug + Send> std::error::Error for ProtocolError<E> {}