1use std::fmt;
2
3#[derive(PartialEq, Eq, Hash, Debug, Clone)]
4pub enum Header {
5 AccessControlAllowOrigin,
7 Accept,
8 AcceptEncoding,
10 AcceptLanguage,
12 AcceptRanges,
14 CacheControl,
16 Cookie,
18 Connection,
20 ContentDisposition,
21 ContentLength,
23 ContentSegurityPolicy,
25 ContentType,
27 Date,
29 ETag,
31 Host,
33 LastModified,
35 Location,
37 SecFetchDest,
39 SecWebSocketAccept,
41 SecWebSocketKey,
43 SecWebSocketOrigin,
45 SecWebSocketProtocol,
47 SecWebSocketVersion,
49 Server,
51 SetCookie,
53 TransferEncoding,
55 Upgrade,
57 UserAgent,
59 Vary,
61 NONE,
63}
64
65impl Header {
66 pub fn as_str(&self) -> &'static str {
67 match self {
68 Header::AccessControlAllowOrigin => "Access-Control-Allow-Origin",
69 Header::Accept => "Accept",
70 Header::AcceptEncoding => "Accept-Encoding",
71 Header::AcceptLanguage => "Accept-Languages",
72 Header::AcceptRanges => "Accept-Ranges",
73
74 Header::CacheControl => "Cache-Control",
75 Header::Cookie => "Cookie",
76 Header::Connection => "Connection",
77 Header::ContentDisposition => "Content-Disposition",
78 Header::ContentLength => "Content-Length",
79 Header::ContentSegurityPolicy => "Content-Segurity-Policy",
80 Header::ContentType => "Content-Type",
81
82 Header::Date => "Date",
83 Header::ETag => "ETag",
84 Header::Host => "Host",
85
86 Header::Location => "Location",
87 Header::LastModified => "Last-Modified",
88
89 Header::SecFetchDest => "Sec-Fetch-Dest",
90 Header::SecWebSocketAccept => "Sec-WebSocket-Accept",
91 Header::SecWebSocketKey => "Sec-WebSocket-Key",
92 Header::SecWebSocketOrigin => "Sec-WebSocket-Origin",
93 Header::SecWebSocketProtocol => "Sec-WebSocket-Protocol",
94 Header::SecWebSocketVersion => "Sec-WebSocket-Version",
95
96 Header::Server => "Server",
97 Header::SetCookie => "Set-Cookie",
98
99 Header::TransferEncoding => "Transfer-Encoding",
100 Header::Upgrade => "Upgrade",
101 Header::UserAgent => "User-Agent",
102 Header::Vary => "Vary",
103
104 Header::NONE => "",
105 }
106 }
107}
108
109pub fn from_string_to_header(header: String) -> Header {
110 match header.to_lowercase().as_str() {
111 "access-control-allow-origin" => Header::AccessControlAllowOrigin,
112 "accept" => Header::Accept,
113 "accept-encoding" => Header::AcceptEncoding,
114 "accept-language" => Header::AcceptLanguage,
115 "accept-ranges" => Header::AcceptRanges,
116
117 "cache-control" => Header::CacheControl,
118 "cookie" => Header::Cookie,
119 "connection" => Header::Connection,
120 "content-disposition" => Header::ContentDisposition,
121 "content-length" => Header::ContentLength,
122 "content-segurity-policy" => Header::ContentSegurityPolicy,
123 "content-type" => Header::ContentType,
124
125 "date" => Header::Date,
126 "etag" => Header::ETag,
127 "host" => Header::Host,
128
129 "location" => Header::Location,
130 "last-modified" => Header::LastModified,
131
132 "sec-fetch-dest" => Header::SecFetchDest,
133 "sec-webSocket-accept" => Header::SecWebSocketAccept,
134 "sec-webSocket-key" => Header::SecWebSocketKey,
135 "sec-webSocket-origin" => Header::SecWebSocketOrigin,
136 "sec-webSocket-protocol" => Header::SecWebSocketProtocol,
137 "sec-webSocket-version" => Header::SecWebSocketVersion,
138
139 "server" => Header::Server,
140 "set-cookie" => Header::SetCookie,
141
142 "transfer-encoding" => Header::TransferEncoding,
143 "upgrade" => Header::Upgrade,
144 "user-agent" => Header::UserAgent,
145 "vary" => Header::Vary,
146
147 _ => Header::NONE,
148 }
149}
150
151impl fmt::Display for Header {
152 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
153 write!(f, "{}", self)
154 }
155}
156
157#[derive(Debug)]
158pub enum ContentType {
159 JS,
160 PDF,
161 JSON,
162 XML,
163 ZIP,
164 Urlencode,
165
166 ImgGif,
167 ImgJpeg,
168 ImgPng,
169 Xicon,
170
171 FormData,
172
173 CSS,
174 CSV,
175 Html,
176 Text,
177
178 MPEG,
179 MP4,
180 WEBM,
181}
182
183impl ContentType {
184 pub fn as_str(&self) -> &'static str {
185 match self {
186 ContentType::JS => "application/js; charset=utf-8",
187 ContentType::PDF => "application/pdf; charset=utf-8",
188 ContentType::JSON => "application/json; charset=utf-8",
189 ContentType::XML => "application/xml",
190 ContentType::ZIP => "application/zip",
191 ContentType::Urlencode => "application/x-www-form-urlencoded",
192
193 ContentType::ImgGif => "image/gif",
194 ContentType::ImgJpeg => "image/jpeg",
195 ContentType::ImgPng => "image/png",
196 ContentType::Xicon => "image/x-icon",
197
198 ContentType::FormData => "multipart/form-data",
199
200 ContentType::CSS => "text/css; charset=utf-8",
201 ContentType::CSV => "text/csv; charset=utf-8",
202 ContentType::Html => "text/html; charset=utf-8",
203 ContentType::Text => "text/plain; charset=utf-8",
204
205 ContentType::MPEG => "video/mpeg",
206 ContentType::MP4 => "video/mp4",
207 ContentType::WEBM => "video/webm",
208 }
209 }
210}
211
212fn from_str_to_content_type(str: &'static str) -> ContentType {
213 match str.to_lowercase().as_str() {
214 "application/js; charset=utf-8" => ContentType::JS,
215 "application/pdf; charset=utf-8" => ContentType::PDF,
216 "application/json; charset=utf-8" => ContentType::JSON,
217 "application/xml" => ContentType::XML,
218 "application/zip" => ContentType::ZIP,
219 "application/x-www-form-urlencoded" => ContentType::Urlencode,
220
221 "image/gif" => ContentType::ImgGif,
222 "image/jpeg" => ContentType::ImgJpeg,
223 "image/png" => ContentType::ImgPng,
224 "image/x-icon" => ContentType::Xicon,
225
226 "multipart/form-data" => ContentType::FormData,
227
228 "text/css; charset=utf-8" => ContentType::CSS,
229 "text/csv; charset=utf-8" => ContentType::CSV,
230 "text/html; charset=utf-8" => ContentType::Html,
231 "text/plain; charset=utf-8" => ContentType::Text,
232
233 "video/mpeg" => ContentType::MPEG,
234 "video/mp4" => ContentType::MP4,
235 "video/webm" => ContentType::WEBM,
236
237 _ => ContentType::Text,
238 }
239}
240
241pub fn from_str_ext_to_content_type(str: &str) -> ContentType {
242 match str.to_lowercase().as_str() {
243 "application/js" => ContentType::JS,
244 "application/pdf" => ContentType::PDF,
245 "application/json" => ContentType::JSON,
246 "application/xml" => ContentType::XML,
247 "application/zip" => ContentType::ZIP,
248 "application/x-www-form-urlencoded" => ContentType::Urlencode,
249
250 "image/gif" => ContentType::ImgGif,
251 "image/jpeg" => ContentType::ImgJpeg,
252 "image/png" => ContentType::ImgPng,
253 "image/x-icon" => ContentType::Xicon,
254
255 "multipart/form-data" => ContentType::FormData,
256
257 "text/css; charset=utf-8" => ContentType::CSS,
258 "text/csv; charset=utf-8" => ContentType::CSV,
259 "text/html; charset=utf-8" => ContentType::Html,
260 "text/plain; charset=utf-8" => ContentType::Text,
261
262 "video/mpeg" => ContentType::MPEG,
263 "video/mp4" => ContentType::MP4,
264 "video/webm" => ContentType::WEBM,
265
266 _ => ContentType::Text,
267 }
268}