Skip to main content

reqrio/packet/http/header/
status.rs

1use std::fmt::Display;
2
3#[derive(Clone, PartialEq)]
4pub struct HttpStatus(u16);
5
6
7#[allow(non_upper_case_globals)]
8impl HttpStatus {
9    pub const None: HttpStatus = HttpStatus(0);
10    pub const Continue: HttpStatus = HttpStatus(100);
11    pub const SwitchingProtocols: HttpStatus = HttpStatus(101);
12    pub const OK: HttpStatus = HttpStatus(200);
13    pub const Created: HttpStatus = HttpStatus(201);
14    pub const Accepted: HttpStatus = HttpStatus(202);
15    pub const NoContent: HttpStatus = HttpStatus(204);
16    pub const PartialContent: HttpStatus = HttpStatus(206);
17    pub const Move: HttpStatus = HttpStatus(301);
18    pub const Found: HttpStatus = HttpStatus(302);
19    pub const NotModified: HttpStatus = HttpStatus(304);
20    pub const TemporaryRedirect: HttpStatus = HttpStatus(307);
21    pub const PermanentRedirect: HttpStatus = HttpStatus(308);
22    pub const BadRequest: HttpStatus = HttpStatus(400);
23    pub const Unauthorized: HttpStatus = HttpStatus(401);
24    pub const Forbidden: HttpStatus = HttpStatus(403);
25    pub const NotFound: HttpStatus = HttpStatus(404);
26    pub const LengthRequired: HttpStatus = HttpStatus(411);
27    pub const PreconditionFailed: HttpStatus = HttpStatus(412);
28    pub const ReqTooLarge: HttpStatus = HttpStatus(413);
29    pub const Teapot: HttpStatus = HttpStatus(418);
30    pub const TooManyRequests: HttpStatus = HttpStatus(429);
31    pub const ServerError: HttpStatus = HttpStatus(500);
32    pub const BadGateway: HttpStatus = HttpStatus(502);
33    pub const ServiceUnavailable: HttpStatus = HttpStatus(503);
34    pub const GatewayTimeOut: HttpStatus = HttpStatus(504);
35    pub const ReceiveTimeOut: HttpStatus = HttpStatus(524);
36}
37
38impl HttpStatus {
39    pub fn new(code: u16) -> HttpStatus { HttpStatus(code) }
40
41    pub fn code(&self) -> u16 { self.0 }
42
43    pub fn spec(&self) -> &'static str {
44        match self.0 {
45            0 => "None",
46            100 => "Continue",
47            101 => "Switching Protocols",
48            200 => "Ok",
49            201 => "Created",
50            202 => "Accepted",
51            204 => "No Content",
52            206 => "Partial Content",
53            301 => "Move",
54            302 => "Found",
55            304 => "Not Modified",
56            307 => "Temporary Redirect",
57            308 => "Permanent Redirect",
58            400 => "Bad Request",
59            401 => "Unauthorized",
60            403 => "Forbidden",
61            404 => "Not Found",
62            411 => "Length Required",
63            412 => "Precondition Failed",
64            413 => "Req Too Large",
65            418 => "Teapot",
66            429 => "Too Many Requests",
67            500 => "Server Error",
68            502 => "Bad Gateway",
69            503 => "Service Unavailable",
70            504 => "Gateway Time Out",
71            524 => "Receive Time Out",
72            _ => "Unknown"
73        }
74    }
75}
76
77impl Display for HttpStatus {
78    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
79        write!(f, "{}({})", self.spec(), self.code())
80    }
81}