#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct RequestStatus {
pub code: StatusCode,
pub description: Box<str>,
pub exception_data: Option<Box<str>>,
}
impl std::fmt::Display for RequestStatus {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{};{}", self.code, self.description)?;
if let Some(data) = &self.exception_data {
write!(f, ";{data}")?;
}
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct StatusCode {
pub class: Class,
pub major: u8,
pub minor: Option<u8>,
}
impl std::fmt::Display for StatusCode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}.{}", self.class.as_u8(), self.major)?;
if let Some(minor) = self.minor {
write!(f, ".{minor}")?;
}
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum Class {
C1,
C2,
C3,
C4,
C5,
}
impl Class {
pub const fn as_u8(self) -> u8 {
match self {
Class::C1 => 1,
Class::C2 => 2,
Class::C3 => 3,
Class::C4 => 4,
Class::C5 => 5,
}
}
pub const fn from_u8(value: u8) -> Option<Self> {
match value {
1 => Some(Class::C1),
2 => Some(Class::C2),
3 => Some(Class::C3),
4 => Some(Class::C4),
5 => Some(Class::C5),
_ => None,
}
}
}