#[derive(Debug, Clone)]
pub struct Status {
pub code: u16,
pub text: String,
pub category: StatusCategory,
}
#[allow(clippy::module_name_repetitions)]
#[derive(Debug, Clone, PartialEq)]
pub enum StatusCategory {
Informational,
Success,
Redirection,
ClientError,
ServerError,
Unknown,
}
#[allow(dead_code)]
impl Status {
pub const fn is_error(&self) -> bool {
matches!(
self.category,
StatusCategory::ClientError | StatusCategory::ServerError
)
}
pub fn is_ok(&self) -> bool {
self.category == StatusCategory::Success
}
}
impl From<&web_sys::Response> for Status {
fn from(response: &web_sys::Response) -> Self {
let text = response.status_text();
match response.status() {
code @ 100..=199 => Status {
code,
text,
category: StatusCategory::Informational,
},
code @ 200..=299 => Status {
code,
text,
category: StatusCategory::Success,
},
code @ 300..=399 => Status {
code,
text,
category: StatusCategory::Redirection,
},
code @ 400..=499 => Status {
code,
text,
category: StatusCategory::ClientError,
},
code @ 500..=599 => Status {
code,
text,
category: StatusCategory::ServerError,
},
code => Status {
code,
text,
category: StatusCategory::Unknown,
},
}
}
}