use core::fmt;
use bounded_static_derive::ToStatic;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ToStatic)]
pub struct EnhancedStatusCode {
pub class: u8,
pub subject: u16,
pub detail: u16,
}
impl EnhancedStatusCode {
pub fn new(class: u8, subject: u16, detail: u16) -> Option<Self> {
if matches!(class, 2 | 4 | 5) && subject < 1000 && detail < 1000 {
Some(Self {
class,
subject,
detail,
})
} else {
None
}
}
pub fn is_success(&self) -> bool {
self.class == 2
}
pub fn is_temporary_failure(&self) -> bool {
self.class == 4
}
pub fn is_permanent_failure(&self) -> bool {
self.class == 5
}
}
impl fmt::Display for EnhancedStatusCode {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}.{}.{}", self.class, self.subject, self.detail)
}
}