io_http/rfc9110/
status.rs1use core::ops::Deref;
6
7#[derive(Clone, Copy, Debug, Eq, PartialEq)]
9pub struct StatusCode(pub u16);
10
11impl StatusCode {
12 pub fn is_success(self) -> bool {
14 self.0 >= 200 && self.0 < 300
15 }
16
17 pub fn is_redirection(self) -> bool {
19 self.0 >= 300 && self.0 < 400
20 }
21}
22
23impl Deref for StatusCode {
24 type Target = u16;
25
26 fn deref(&self) -> &Self::Target {
27 &self.0
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use crate::rfc9110::status::*;
34
35 #[test]
36 fn success_range() {
37 assert!(StatusCode(200).is_success());
38 assert!(StatusCode(204).is_success());
39 assert!(StatusCode(299).is_success());
40 assert!(!StatusCode(199).is_success());
41 assert!(!StatusCode(300).is_success());
42 }
43
44 #[test]
45 fn redirection_range() {
46 assert!(StatusCode(300).is_redirection());
47 assert!(StatusCode(301).is_redirection());
48 assert!(StatusCode(399).is_redirection());
49 assert!(!StatusCode(299).is_redirection());
50 assert!(!StatusCode(400).is_redirection());
51 }
52}