pillow_http/
header.rs

1use std::fmt;
2
3#[derive(PartialEq, Eq, Hash, Debug, Clone)]
4pub enum Header {
5    /// Cors
6    AccessControlAllowOrigin,
7    Accept,
8    /// How to encoding to send files
9    AcceptEncoding,
10    /// Languages
11    AcceptLanguage,
12    ///
13    AcceptRanges,
14    ///
15    CacheControl,
16    ///
17    Cookie,
18    /// Keep Connection
19    Connection,
20    ContentDisposition,
21    /// Content Length
22    ContentLength,
23    /// Content Segurity Policy
24    ContentSegurityPolicy,
25    /// Content Type
26    ContentType,
27    /// Date
28    Date,
29    /// Cache
30    ETag,
31    /// Where
32    Host,
33    /// Last Modified
34    LastModified,
35    ///
36    Location,
37    ///
38    SecFetchDest,
39    ///
40    SecWebSocketAccept,
41    ///
42    SecWebSocketKey,
43    ///
44    SecWebSocketOrigin,
45    ///
46    SecWebSocketProtocol,
47    ///
48    SecWebSocketVersion,
49    /// Server name
50    Server,
51    /// Cookies
52    SetCookie,
53    /// Encoding content
54    TransferEncoding,
55    /// Upgrade
56    Upgrade,
57    ///
58    UserAgent,
59    /// Accept Encoding
60    Vary,
61    /// For Headers not implemented yet
62    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}