fire_http_representation/header/
mod.rs1use std::net::SocketAddr;
2
3pub use http::{Method, StatusCode, Uri};
4
5pub mod url;
6pub use url::Url;
7
8mod contenttype;
9pub use contenttype::{ContentType, Mime};
10
11pub mod values;
12pub use values::{HeaderValue, HeaderValues};
13
14pub use constants::*;
15
16#[derive(Debug, Clone)]
18pub struct RequestHeader {
19 pub address: SocketAddr,
20 pub method: Method,
21 pub uri: Uri,
22 pub values: HeaderValues,
23}
24
25impl RequestHeader {
26 pub fn address(&self) -> &SocketAddr {
28 &self.address
29 }
30
31 pub fn method(&self) -> &Method {
33 &self.method
34 }
35
36 pub fn uri(&self) -> &Uri {
38 &self.uri
39 }
40
41 pub fn to_url(&self) -> Option<Url> {
42 Url::from_inner(self.uri.clone())
43 }
44
45 pub fn values(&self) -> &HeaderValues {
47 &self.values
48 }
49
50 pub fn value<K>(&self, key: K) -> Option<&str>
55 where
56 K: values::AsHeaderName,
57 {
58 self.values.get_str(key)
59 }
60}
61
62#[derive(Debug, Clone)]
67pub struct ResponseHeader {
68 pub status_code: StatusCode,
69 pub content_type: ContentType,
70 pub values: HeaderValues,
71}
72
73impl ResponseHeader {
74 pub fn status_code(&self) -> &StatusCode {
76 &self.status_code
77 }
78
79 pub fn content_type(&self) -> &ContentType {
81 &self.content_type
82 }
83
84 pub fn values(&self) -> &HeaderValues {
86 &self.values
87 }
88
89 pub fn value<K>(&self, key: K) -> Option<&str>
94 where
95 K: values::AsHeaderName,
96 {
97 self.values.get_str(key)
98 }
99}
100
101impl Default for ResponseHeader {
102 fn default() -> Self {
103 Self {
104 status_code: StatusCode::OK,
105 content_type: ContentType::None,
106 values: HeaderValues::new(),
107 }
108 }
109}
110
111mod constants {
112 pub use hyper::header::{
113 ACCEPT, ACCEPT_CHARSET, ACCEPT_ENCODING, ACCEPT_LANGUAGE,
114 ACCEPT_RANGES, ACCESS_CONTROL_ALLOW_CREDENTIALS,
115 ACCESS_CONTROL_ALLOW_HEADERS, ACCESS_CONTROL_ALLOW_METHODS,
116 ACCESS_CONTROL_ALLOW_ORIGIN, ACCESS_CONTROL_EXPOSE_HEADERS,
117 ACCESS_CONTROL_MAX_AGE, ACCESS_CONTROL_REQUEST_HEADERS,
118 ACCESS_CONTROL_REQUEST_METHOD, AGE, ALLOW, ALT_SVC, AUTHORIZATION,
119 CACHE_CONTROL, CONNECTION, CONTENT_DISPOSITION, CONTENT_ENCODING,
120 CONTENT_LANGUAGE, CONTENT_LENGTH, CONTENT_LOCATION, CONTENT_RANGE,
121 CONTENT_SECURITY_POLICY, CONTENT_SECURITY_POLICY_REPORT_ONLY,
122 CONTENT_TYPE, COOKIE, DATE, DNT, ETAG, EXPECT, EXPIRES, FORWARDED,
123 FROM, HOST, IF_MATCH, IF_MODIFIED_SINCE, IF_NONE_MATCH, IF_RANGE,
124 IF_UNMODIFIED_SINCE, LAST_MODIFIED, LINK, LOCATION, MAX_FORWARDS,
125 ORIGIN, PRAGMA, PROXY_AUTHENTICATE, PROXY_AUTHORIZATION,
126 PUBLIC_KEY_PINS, PUBLIC_KEY_PINS_REPORT_ONLY, RANGE, REFERER,
127 REFERRER_POLICY, REFRESH, RETRY_AFTER, SEC_WEBSOCKET_ACCEPT,
128 SEC_WEBSOCKET_EXTENSIONS, SEC_WEBSOCKET_KEY, SEC_WEBSOCKET_PROTOCOL,
129 SEC_WEBSOCKET_VERSION, SERVER, SET_COOKIE, STRICT_TRANSPORT_SECURITY,
130 TE, TRAILER, TRANSFER_ENCODING, UPGRADE, UPGRADE_INSECURE_REQUESTS,
131 USER_AGENT, VARY, VIA, WARNING, WWW_AUTHENTICATE,
132 X_CONTENT_TYPE_OPTIONS, X_DNS_PREFETCH_CONTROL, X_FRAME_OPTIONS,
133 X_XSS_PROTECTION,
134 };
135}