http_server_rs/
httpconstants.rs1use std::time::SystemTime;
2
3pub struct HttpConstants {
4}
5
6impl HttpConstants {
7
8 pub fn get_current_formatted_date() -> String {
9 let total_seconds = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs()
11 ;
13 return HttpConstants::get_formatted_date(total_seconds);
14 }
15
16 pub fn get_formatted_date(total_seconds : u64) -> String {
17
18 let seconds = total_seconds % 60;
19 let mut minutes = total_seconds / 60;
20 let mut hours = minutes / 60;
21 minutes %= 60;
22 let mut days = 1 + hours / 24;
23 let total_days = days - 1;
24 hours %= 24;
25 let mut months = 0;
26 let mut years = 1970;
27 let mut month_length = 0;
28 while days > month_length {
29 month_length = HttpConstants::get_month_length(months + 1, years);
30 months = (months + 1) % 12;
31 days -= month_length;
32 month_length = HttpConstants::get_month_length(months + 1, years);
33 if months == 0 {
34 years += 1;
35 }
36 }
37
38 let format_months = months + 1; let week_day = (3 + total_days) % 7;
41
42
43
44 return format!("{}, {} {} {} {}:{}:{} {}",
45 HttpConstants::get_day_name(week_day),
46 HttpConstants::buffer_number(days),
47 HttpConstants::get_month_name(format_months),
48 years,
49 HttpConstants::buffer_number(hours),
50 HttpConstants::buffer_number(minutes),
51 HttpConstants::buffer_number(seconds),
52 "UTC");
53 }
54
55 fn get_month_length(months : u64, year : u64) -> u64 {
56 if months == 1 || months == 3 || months == 5 || months == 7 || months == 8 || months == 10 || months == 12 {
64 return 31;
65 } else if months == 2 { if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {return 29;
69 }
70
71 return 28;
72 }
73
74 return 30; }
76
77 fn get_month_name(month : u64) -> String {
78 return (match month {
79 1 => "Jan",
80 2 => "Feb",
81 3 => "Mar",
82 4 => "Apr",
83 5 => "May",
84 6 => "Jun",
85 7 => "Jul",
86 8 => "Aug",
87 9 => "Sep",
88 10 => "Oct",
89 11 => "Nov",
90 12 => "Dec",
91 _ => {
92 panic!("Invalid month number: {}", month);
93 }
94 }).to_string()
95 }
96
97 fn get_day_name(week_day : u64) -> String {
98 return (match week_day {
99 0 => "Mon",
100 1 => "Tue",
101 2 => "Wed",
102 3 => "Thu",
103 4 => "Fri",
104 5 => "Sat",
105 6 => "Sun",
106 _ => {
107 panic!("Invalid day number: {}", week_day);
108 }
109 }).to_string()
110 }
111
112 fn buffer_number(number : u64) -> String {
113 let format_number;
114 if number <= 9 {
115 format_number = String::from("0") + number.to_string().as_str();
116 } else {
117 format_number = number.to_string();
118 }
119 return format_number;
120 }
121
122 pub fn get_code_text(code : i32) -> &'static str {
123 return match code {
124 HTTP_OK => " OK",
125 HTTP_CONTINUE => " Continue",
126 HTTP_CREATED => " Created",
127 HTTP_ACCEPTED => " Accepted",
128 HTTP_NOT_AUTHORITATIVE => " Non-Authoritative Information",
129 HTTP_NO_CONTENT => " No Content",
130 HTTP_RESET => " Reset Content",
131 HTTP_PARTIAL => " Partial Content",
132 HTTP_MULT_CHOICE => " Multiple Choices",
133 HTTP_MOVED_PERM => " Moved Permanently",
134 HTTP_MOVED_TEMP => " Temporary Redirect",
135 HTTP_SEE_OTHER => " See Other",
136 HTTP_NOT_MODIFIED => " Not Modified",
137 HTTP_USE_PROXY => " Use Proxy",
138 HTTP_BAD_REQUEST => " Bad Request",
139 HTTP_UNAUTHORIZED => " Unauthorized" ,
140 HTTP_PAYMENT_REQUIRED => " Payment Required",
141 HTTP_FORBIDDEN => " Forbidden",
142 HTTP_NOT_FOUND => " Not Found",
143 HTTP_BAD_METHOD => " Method Not Allowed",
144 HTTP_NOT_ACCEPTABLE => " Not Acceptable",
145 HTTP_PROXY_AUTH => " Proxy Authentication Required",
146 HTTP_CLIENT_TIMEOUT => " Request Time-Out",
147 HTTP_CONFLICT => " Conflict",
148 HTTP_GONE => " Gone",
149 HTTP_LENGTH_REQUIRED => " Length Required",
150 HTTP_PRECON_FAILED => " Precondition Failed",
151 HTTP_ENTITY_TOO_LARGE => " Request Entity Too Large",
152 HTTP_REQ_TOO_LONG => " Request-URI Too Large",
153 HTTP_UNSUPPORTED_TYPE => " Unsupported Media Type",
154 HTTP_INTERNAL_ERROR => " Internal Server Error",
155 HTTP_NOT_IMPLEMENTED => " Not Implemented",
156 HTTP_BAD_GATEWAY => " Bad Gateway",
157 HTTP_UNAVAILABLE => " Service Unavailable",
158 HTTP_GATEWAY_TIMEOUT => " Gateway Timeout",
159 HTTP_VERSION => " HTTP Version Not Supported",
160 _ => " ",
161 }
162 }
163
164}
165
166pub const HTTP_CONTINUE : i32 = 100;
167pub const HTTP_OK : i32 = 200;
168pub const HTTP_CREATED : i32 = 201;
169pub const HTTP_ACCEPTED : i32 = 202;
170pub const HTTP_NOT_AUTHORITATIVE : i32 = 203;
171pub const HTTP_NO_CONTENT : i32 = 204;
172pub const HTTP_RESET : i32 = 205;
173pub const HTTP_PARTIAL : i32 = 206;
174pub const HTTP_MULT_CHOICE : i32 = 300;
175pub const HTTP_MOVED_PERM : i32 = 301;
176pub const HTTP_MOVED_TEMP : i32 = 302;
177pub const HTTP_SEE_OTHER : i32 = 303;
178pub const HTTP_NOT_MODIFIED : i32 = 304;
179pub const HTTP_USE_PROXY : i32 = 305;
180pub const HTTP_BAD_REQUEST : i32 = 400;
181pub const HTTP_UNAUTHORIZED : i32 = 401;
182pub const HTTP_PAYMENT_REQUIRED : i32 = 402;
183pub const HTTP_FORBIDDEN : i32 = 403;
184pub const HTTP_NOT_FOUND : i32 = 404;
185pub const HTTP_BAD_METHOD : i32 = 405;
186pub const HTTP_NOT_ACCEPTABLE : i32 = 406;
187pub const HTTP_PROXY_AUTH : i32 = 407;
188pub const HTTP_CLIENT_TIMEOUT : i32 = 408;
189pub const HTTP_CONFLICT : i32 = 409;
190pub const HTTP_GONE : i32 = 410;
191pub const HTTP_LENGTH_REQUIRED : i32 = 411;
192pub const HTTP_PRECON_FAILED : i32 = 412;
193pub const HTTP_ENTITY_TOO_LARGE : i32 = 413;
194pub const HTTP_REQ_TOO_LONG : i32 = 414;
195pub const HTTP_UNSUPPORTED_TYPE : i32 = 415;
196pub const HTTP_INTERNAL_ERROR : i32 = 500;
197pub const HTTP_NOT_IMPLEMENTED : i32 = 501;
198pub const HTTP_BAD_GATEWAY : i32 = 502;
199pub const HTTP_UNAVAILABLE : i32 = 503;
200pub const HTTP_GATEWAY_TIMEOUT : i32 = 504;
201pub const HTTP_VERSION : i32 = 505;