reqrio/packet/http/header/
status.rs1use 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}