use std::net::SocketAddr;
pub use http::{StatusCode, Method, Uri};
pub mod url;
pub use url::Url;
mod contenttype;
pub use contenttype::{ContentType, Mime};
pub mod values;
pub use values::{HeaderValues, HeaderValue};
pub use constants::*;
#[derive(Debug, Clone)]
pub struct RequestHeader {
pub address: SocketAddr,
pub method: Method,
pub uri: Uri,
pub values: HeaderValues
}
impl RequestHeader {
pub fn address(&self) -> &SocketAddr {
&self.address
}
pub fn method(&self) -> &Method {
&self.method
}
pub fn uri(&self) -> &Uri {
&self.uri
}
pub fn to_url(&self) -> Option<Url> {
Url::from_inner(self.uri.clone())
}
pub fn values(&self) -> &HeaderValues {
&self.values
}
pub fn value<K>(&self, key: K) -> Option<&str>
where K: values::AsHeaderName {
self.values.get_str(key)
}
}
#[derive(Debug, Clone)]
pub struct ResponseHeader {
pub status_code: StatusCode,
pub content_type: ContentType,
pub values: HeaderValues
}
impl ResponseHeader {
pub fn status_code(&self) -> &StatusCode {
&self.status_code
}
pub fn content_type(&self) -> &ContentType {
&self.content_type
}
pub fn values(&self) -> &HeaderValues {
&self.values
}
pub fn value<K>(&self, key: K) -> Option<&str>
where K: values::AsHeaderName {
self.values.get_str(key)
}
}
impl Default for ResponseHeader {
fn default() -> Self {
Self {
status_code: StatusCode::OK,
content_type: ContentType::None,
values: HeaderValues::new()
}
}
}
mod constants {
pub use hyper::header::{
ACCEPT,
ACCEPT_CHARSET,
ACCEPT_ENCODING,
ACCEPT_LANGUAGE,
ACCEPT_RANGES,
ACCESS_CONTROL_ALLOW_CREDENTIALS,
ACCESS_CONTROL_ALLOW_HEADERS,
ACCESS_CONTROL_ALLOW_METHODS,
ACCESS_CONTROL_ALLOW_ORIGIN,
ACCESS_CONTROL_EXPOSE_HEADERS,
ACCESS_CONTROL_MAX_AGE,
ACCESS_CONTROL_REQUEST_HEADERS,
ACCESS_CONTROL_REQUEST_METHOD,
AGE,
ALLOW,
ALT_SVC,
AUTHORIZATION,
CACHE_CONTROL,
CONNECTION,
CONTENT_DISPOSITION,
CONTENT_ENCODING,
CONTENT_LANGUAGE,
CONTENT_LENGTH,
CONTENT_LOCATION,
CONTENT_RANGE,
CONTENT_SECURITY_POLICY,
CONTENT_SECURITY_POLICY_REPORT_ONLY,
CONTENT_TYPE,
COOKIE,
DATE,
DNT,
ETAG,
EXPECT,
EXPIRES,
FORWARDED,
FROM,
HOST,
IF_MATCH,
IF_MODIFIED_SINCE,
IF_NONE_MATCH,
IF_RANGE,
IF_UNMODIFIED_SINCE,
LAST_MODIFIED,
LINK,
LOCATION,
MAX_FORWARDS,
ORIGIN,
PRAGMA,
PROXY_AUTHENTICATE,
PROXY_AUTHORIZATION,
PUBLIC_KEY_PINS,
PUBLIC_KEY_PINS_REPORT_ONLY,
RANGE,
REFERER,
REFERRER_POLICY,
REFRESH,
RETRY_AFTER,
SEC_WEBSOCKET_ACCEPT,
SEC_WEBSOCKET_EXTENSIONS,
SEC_WEBSOCKET_KEY,
SEC_WEBSOCKET_PROTOCOL,
SEC_WEBSOCKET_VERSION,
SERVER,
SET_COOKIE,
STRICT_TRANSPORT_SECURITY,
TE,
TRAILER,
TRANSFER_ENCODING,
UPGRADE,
UPGRADE_INSECURE_REQUESTS,
USER_AGENT,
VARY,
VIA,
WARNING,
WWW_AUTHENTICATE,
X_CONTENT_TYPE_OPTIONS,
X_DNS_PREFETCH_CONTROL,
X_FRAME_OPTIONS,
X_XSS_PROTECTION
};
}