dhttp/reqres/
status_code.rs1use std::fmt;
2use std::error::Error;
3
4use crate::core::{HttpError, HttpErrorType};
5
6#[derive(Debug, Clone, Copy)]
8pub struct StatusCode(pub u16);
9
10impl StatusCode {
11 pub fn as_str(&self) -> &'static str {
19 match self.0 {
20 200 => "OK",
21 206 => "Partial content",
22 301 => "Moved permanently",
23 304 => "Not modified",
24 400 => "Bad request",
25 401 => "Unauthorized",
26 403 => "Forbidden",
27 404 => "Not found",
28 405 => "Method not allowed",
29 413 => "Request entity too large",
30 416 => "Range not satisfiable",
31 500 => "Internal server error",
32 505 => "HTTP version not supported",
33 _ => "Unknown",
34 }
35 }
36}
37
38impl StatusCode {
39 pub const OK: StatusCode = StatusCode(200);
43 pub const PARTIAL_CONTENT: StatusCode = StatusCode(206);
45
46 pub const MOVED_PERMANENTLY: StatusCode = StatusCode(301);
50 pub const NOT_MODIFIED: StatusCode = StatusCode(304);
52
53 pub const BAD_REQUEST: StatusCode = StatusCode(400);
57 pub const UNAUTHORIZED: StatusCode = StatusCode(401);
59 pub const FORBIDDEN: StatusCode = StatusCode(403);
61 pub const NOT_FOUND: StatusCode = StatusCode(404);
63 pub const METHOD_NOT_ALLOWED: StatusCode = StatusCode(405);
65 pub const REQUEST_ENTITY_TOO_LARGE: StatusCode = StatusCode(413);
67 pub const RANGE_NOT_SATISFIABLE: StatusCode = StatusCode(416);
69
70 pub const INTERNAL_SERVER_ERROR: StatusCode = StatusCode(500);
74 pub const HTTP_VERSION_NOT_SUPPORTED: StatusCode = StatusCode(505);
76}
77
78impl fmt::Display for StatusCode {
79 fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
80 self.0.fmt(fmt)
81 }
82}
83
84impl Error for StatusCode {}
85
86impl HttpError for StatusCode {
87 fn error_type(&self) -> HttpErrorType {
88 HttpErrorType::Hidden
89 }
90
91 fn status_code(&self) -> StatusCode {
92 *self
93 }
94}