use core::ops::Deref;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct StatusCode(pub u16);
impl StatusCode {
pub fn is_success(self) -> bool {
self.0 >= 200 && self.0 < 300
}
pub fn is_redirection(self) -> bool {
self.0 >= 300 && self.0 < 400
}
}
impl Deref for StatusCode {
type Target = u16;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[cfg(test)]
mod tests {
use crate::rfc9110::status::*;
#[test]
fn success_range() {
assert!(StatusCode(200).is_success());
assert!(StatusCode(204).is_success());
assert!(StatusCode(299).is_success());
assert!(!StatusCode(199).is_success());
assert!(!StatusCode(300).is_success());
}
#[test]
fn redirection_range() {
assert!(StatusCode(300).is_redirection());
assert!(StatusCode(301).is_redirection());
assert!(StatusCode(399).is_redirection());
assert!(!StatusCode(299).is_redirection());
assert!(!StatusCode(400).is_redirection());
}
}