Merge pull request #1256 from brendanzab/add-missing-headers
feat(headers): Add missing headers
This commit is contained in:
@@ -1,30 +0,0 @@
|
|||||||
header! {
|
|
||||||
/// `Last-Event-ID` header, defined in
|
|
||||||
/// [RFC3864](https://html.spec.whatwg.org/multipage/references.html#refsRFC3864)
|
|
||||||
///
|
|
||||||
/// The `Last-Event-ID` header contains information about
|
|
||||||
/// the last event in an http interaction so that it's easier to
|
|
||||||
/// track of event state. This is helpful when working
|
|
||||||
/// with [Server-Sent-Events](http://www.html5rocks.com/en/tutorials/eventsource/basics/). If the connection were to be dropped, for example, it'd
|
|
||||||
/// be useful to let the server know what the last event you
|
|
||||||
/// received was.
|
|
||||||
///
|
|
||||||
/// The spec is a String with the id of the last event, it can be
|
|
||||||
/// an empty string which acts a sort of "reset".
|
|
||||||
///
|
|
||||||
/// # Example
|
|
||||||
/// ```
|
|
||||||
/// use hyper::header::{Headers, LastEventID};
|
|
||||||
///
|
|
||||||
/// let mut headers = Headers::new();
|
|
||||||
/// headers.set(LastEventID("1".to_owned()));
|
|
||||||
/// ```
|
|
||||||
(LastEventID, "Last-Event-ID") => [String]
|
|
||||||
|
|
||||||
test_last_event_id {
|
|
||||||
// Initial state
|
|
||||||
test_header!(test1, vec![b""]);
|
|
||||||
// Own testcase
|
|
||||||
test_header!(test2, vec![b"1"], Some(LastEventID("1".to_owned())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
63
src/header/common/last_event_id.rs
Normal file
63
src/header/common/last_event_id.rs
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
use std::fmt::{self, Display};
|
||||||
|
use header::{self, Header, Raw};
|
||||||
|
|
||||||
|
/// `Last-Event-ID` header, defined in
|
||||||
|
/// [RFC3864](https://html.spec.whatwg.org/multipage/references.html#refsRFC3864)
|
||||||
|
///
|
||||||
|
/// The `Last-Event-ID` header contains information about
|
||||||
|
/// the last event in an http interaction so that it's easier to
|
||||||
|
/// track of event state. This is helpful when working
|
||||||
|
/// with [Server-Sent-Events](http://www.html5rocks.com/en/tutorials/eventsource/basics/). If the connection were to be dropped, for example, it'd
|
||||||
|
/// be useful to let the server know what the last event you
|
||||||
|
/// received was.
|
||||||
|
///
|
||||||
|
/// The spec is a String with the id of the last event, it can be
|
||||||
|
/// an empty string which acts a sort of "reset".
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```
|
||||||
|
/// use hyper::header::{Headers, LastEventId};
|
||||||
|
///
|
||||||
|
/// let mut headers = Headers::new();
|
||||||
|
/// headers.set(LastEventId("1".to_owned()));
|
||||||
|
/// ```
|
||||||
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
pub struct LastEventId(pub String);
|
||||||
|
|
||||||
|
impl Header for LastEventId {
|
||||||
|
#[inline]
|
||||||
|
fn header_name() -> &'static str {
|
||||||
|
static NAME: &'static str = "Last-Event-ID";
|
||||||
|
NAME
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn parse_header(raw: &Raw) -> ::Result<Self> {
|
||||||
|
match raw.one() {
|
||||||
|
Some(line) if line.is_empty() => Ok(LastEventId("".to_owned())),
|
||||||
|
Some(line) => header::parsing::from_raw_str(line).map(LastEventId),
|
||||||
|
None => Err(::Error::Header),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn fmt_header(&self, f: &mut header::Formatter) -> fmt::Result {
|
||||||
|
f.fmt_line(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for LastEventId {
|
||||||
|
#[inline]
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
Display::fmt(&self.0, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__hyper__deref!(LastEventId => String);
|
||||||
|
|
||||||
|
__hyper__tm!(LastEventId, tests {
|
||||||
|
// Initial state
|
||||||
|
test_header!(test1, vec![b""]);
|
||||||
|
// Own testcase
|
||||||
|
test_header!(test2, vec![b"1"], Some(LastEventId("1".to_owned())));
|
||||||
|
});
|
||||||
@@ -6,6 +6,10 @@
|
|||||||
//! strongly-typed theme, the [mime](https://docs.rs/mime) crate
|
//! strongly-typed theme, the [mime](https://docs.rs/mime) crate
|
||||||
//! is used, such as `ContentType(pub Mime)`.
|
//! is used, such as `ContentType(pub Mime)`.
|
||||||
|
|
||||||
|
pub use self::accept_charset::AcceptCharset;
|
||||||
|
pub use self::accept_encoding::AcceptEncoding;
|
||||||
|
pub use self::accept_language::AcceptLanguage;
|
||||||
|
pub use self::accept_ranges::{AcceptRanges, RangeUnit};
|
||||||
pub use self::accept::Accept;
|
pub use self::accept::Accept;
|
||||||
pub use self::access_control_allow_credentials::AccessControlAllowCredentials;
|
pub use self::access_control_allow_credentials::AccessControlAllowCredentials;
|
||||||
pub use self::access_control_allow_headers::AccessControlAllowHeaders;
|
pub use self::access_control_allow_headers::AccessControlAllowHeaders;
|
||||||
@@ -15,18 +19,14 @@ pub use self::access_control_expose_headers::AccessControlExposeHeaders;
|
|||||||
pub use self::access_control_max_age::AccessControlMaxAge;
|
pub use self::access_control_max_age::AccessControlMaxAge;
|
||||||
pub use self::access_control_request_headers::AccessControlRequestHeaders;
|
pub use self::access_control_request_headers::AccessControlRequestHeaders;
|
||||||
pub use self::access_control_request_method::AccessControlRequestMethod;
|
pub use self::access_control_request_method::AccessControlRequestMethod;
|
||||||
pub use self::accept_charset::AcceptCharset;
|
|
||||||
pub use self::accept_encoding::AcceptEncoding;
|
|
||||||
pub use self::accept_language::AcceptLanguage;
|
|
||||||
pub use self::accept_ranges::{AcceptRanges, RangeUnit};
|
|
||||||
pub use self::allow::Allow;
|
pub use self::allow::Allow;
|
||||||
pub use self::authorization::{Authorization, Scheme, Basic, Bearer};
|
pub use self::authorization::{Authorization, Scheme, Basic, Bearer};
|
||||||
pub use self::cache_control::{CacheControl, CacheDirective};
|
pub use self::cache_control::{CacheControl, CacheDirective};
|
||||||
pub use self::connection::{Connection, ConnectionOption};
|
pub use self::connection::{Connection, ConnectionOption};
|
||||||
pub use self::content_disposition::{ContentDisposition, DispositionType, DispositionParam};
|
pub use self::content_disposition::{ContentDisposition, DispositionType, DispositionParam};
|
||||||
pub use self::content_length::ContentLength;
|
|
||||||
pub use self::content_encoding::ContentEncoding;
|
pub use self::content_encoding::ContentEncoding;
|
||||||
pub use self::content_language::ContentLanguage;
|
pub use self::content_language::ContentLanguage;
|
||||||
|
pub use self::content_length::ContentLength;
|
||||||
pub use self::content_location::ContentLocation;
|
pub use self::content_location::ContentLocation;
|
||||||
pub use self::content_range::{ContentRange, ContentRangeSpec};
|
pub use self::content_range::{ContentRange, ContentRangeSpec};
|
||||||
pub use self::content_type::ContentType;
|
pub use self::content_type::ContentType;
|
||||||
@@ -40,9 +40,11 @@ pub use self::host::Host;
|
|||||||
pub use self::if_match::IfMatch;
|
pub use self::if_match::IfMatch;
|
||||||
pub use self::if_modified_since::IfModifiedSince;
|
pub use self::if_modified_since::IfModifiedSince;
|
||||||
pub use self::if_none_match::IfNoneMatch;
|
pub use self::if_none_match::IfNoneMatch;
|
||||||
pub use self::if_unmodified_since::IfUnmodifiedSince;
|
|
||||||
pub use self::if_range::IfRange;
|
pub use self::if_range::IfRange;
|
||||||
|
pub use self::if_unmodified_since::IfUnmodifiedSince;
|
||||||
|
pub use self::last_event_id::LastEventId;
|
||||||
pub use self::last_modified::LastModified;
|
pub use self::last_modified::LastModified;
|
||||||
|
pub use self::link::{Link, LinkValue, RelationType, MediaDesc};
|
||||||
pub use self::location::Location;
|
pub use self::location::Location;
|
||||||
pub use self::origin::Origin;
|
pub use self::origin::Origin;
|
||||||
pub use self::pragma::Pragma;
|
pub use self::pragma::Pragma;
|
||||||
@@ -55,12 +57,12 @@ pub use self::retry_after::RetryAfter;
|
|||||||
pub use self::server::Server;
|
pub use self::server::Server;
|
||||||
pub use self::set_cookie::SetCookie;
|
pub use self::set_cookie::SetCookie;
|
||||||
pub use self::strict_transport_security::StrictTransportSecurity;
|
pub use self::strict_transport_security::StrictTransportSecurity;
|
||||||
|
pub use self::te::Te;
|
||||||
pub use self::transfer_encoding::TransferEncoding;
|
pub use self::transfer_encoding::TransferEncoding;
|
||||||
pub use self::upgrade::{Upgrade, Protocol, ProtocolName};
|
pub use self::upgrade::{Upgrade, Protocol, ProtocolName};
|
||||||
pub use self::user_agent::UserAgent;
|
pub use self::user_agent::UserAgent;
|
||||||
pub use self::vary::Vary;
|
pub use self::vary::Vary;
|
||||||
pub use self::warning::Warning;
|
pub use self::warning::Warning;
|
||||||
pub use self::link::{Link, LinkValue, RelationType, MediaDesc};
|
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
@@ -438,6 +440,10 @@ macro_rules! header {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mod accept_charset;
|
||||||
|
mod accept_encoding;
|
||||||
|
mod accept_language;
|
||||||
|
mod accept_ranges;
|
||||||
mod accept;
|
mod accept;
|
||||||
mod access_control_allow_credentials;
|
mod access_control_allow_credentials;
|
||||||
mod access_control_allow_headers;
|
mod access_control_allow_headers;
|
||||||
@@ -447,14 +453,9 @@ mod access_control_expose_headers;
|
|||||||
mod access_control_max_age;
|
mod access_control_max_age;
|
||||||
mod access_control_request_headers;
|
mod access_control_request_headers;
|
||||||
mod access_control_request_method;
|
mod access_control_request_method;
|
||||||
mod accept_charset;
|
|
||||||
mod accept_encoding;
|
|
||||||
mod accept_language;
|
|
||||||
mod accept_ranges;
|
|
||||||
mod allow;
|
mod allow;
|
||||||
mod authorization;
|
mod authorization;
|
||||||
mod cache_control;
|
mod cache_control;
|
||||||
mod cookie;
|
|
||||||
mod connection;
|
mod connection;
|
||||||
mod content_disposition;
|
mod content_disposition;
|
||||||
mod content_encoding;
|
mod content_encoding;
|
||||||
@@ -463,6 +464,7 @@ mod content_length;
|
|||||||
mod content_location;
|
mod content_location;
|
||||||
mod content_range;
|
mod content_range;
|
||||||
mod content_type;
|
mod content_type;
|
||||||
|
mod cookie;
|
||||||
mod date;
|
mod date;
|
||||||
mod etag;
|
mod etag;
|
||||||
mod expect;
|
mod expect;
|
||||||
@@ -474,7 +476,9 @@ mod if_modified_since;
|
|||||||
mod if_none_match;
|
mod if_none_match;
|
||||||
mod if_range;
|
mod if_range;
|
||||||
mod if_unmodified_since;
|
mod if_unmodified_since;
|
||||||
|
mod last_event_id;
|
||||||
mod last_modified;
|
mod last_modified;
|
||||||
|
mod link;
|
||||||
mod location;
|
mod location;
|
||||||
mod origin;
|
mod origin;
|
||||||
mod pragma;
|
mod pragma;
|
||||||
@@ -487,9 +491,9 @@ mod retry_after;
|
|||||||
mod server;
|
mod server;
|
||||||
mod set_cookie;
|
mod set_cookie;
|
||||||
mod strict_transport_security;
|
mod strict_transport_security;
|
||||||
|
mod te;
|
||||||
mod transfer_encoding;
|
mod transfer_encoding;
|
||||||
mod upgrade;
|
mod upgrade;
|
||||||
mod user_agent;
|
mod user_agent;
|
||||||
mod vary;
|
mod vary;
|
||||||
mod warning;
|
mod warning;
|
||||||
mod link;
|
|
||||||
|
|||||||
@@ -25,19 +25,19 @@ header! {
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use hyper::header::{Headers, TE, Encoding, qitem};
|
/// use hyper::header::{Headers, Te, Encoding, qitem};
|
||||||
///
|
///
|
||||||
/// let mut headers = Headers::new();
|
/// let mut headers = Headers::new();
|
||||||
/// headers.set(
|
/// headers.set(
|
||||||
/// TE(vec![qitem(Encoding::Trailers)])
|
/// Te(vec![qitem(Encoding::Trailers)])
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
/// ```
|
/// ```
|
||||||
/// use hyper::header::{Headers, TE, Encoding, qitem};
|
/// use hyper::header::{Headers, Te, Encoding, qitem};
|
||||||
///
|
///
|
||||||
/// let mut headers = Headers::new();
|
/// let mut headers = Headers::new();
|
||||||
/// headers.set(
|
/// headers.set(
|
||||||
/// TE(vec![
|
/// Te(vec![
|
||||||
/// qitem(Encoding::Trailers),
|
/// qitem(Encoding::Trailers),
|
||||||
/// qitem(Encoding::Gzip),
|
/// qitem(Encoding::Gzip),
|
||||||
/// qitem(Encoding::Deflate),
|
/// qitem(Encoding::Deflate),
|
||||||
@@ -45,18 +45,18 @@ header! {
|
|||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
/// ```
|
/// ```
|
||||||
/// use hyper::header::{Headers, TE, Encoding, QualityItem, q, qitem};
|
/// use hyper::header::{Headers, Te, Encoding, QualityItem, q, qitem};
|
||||||
///
|
///
|
||||||
/// let mut headers = Headers::new();
|
/// let mut headers = Headers::new();
|
||||||
/// headers.set(
|
/// headers.set(
|
||||||
/// TE(vec![
|
/// Te(vec![
|
||||||
/// qitem(Encoding::Trailers),
|
/// qitem(Encoding::Trailers),
|
||||||
/// QualityItem::new(Encoding::Gzip, q(600)),
|
/// QualityItem::new(Encoding::Gzip, q(600)),
|
||||||
/// QualityItem::new(Encoding::EncodingExt("*".to_owned()), q(0)),
|
/// QualityItem::new(Encoding::EncodingExt("*".to_owned()), q(0)),
|
||||||
/// ])
|
/// ])
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
(TE, "TE") => (QualityItem<Encoding>)*
|
(Te, "TE") => (QualityItem<Encoding>)*
|
||||||
|
|
||||||
test_te {
|
test_te {
|
||||||
// From the RFC
|
// From the RFC
|
||||||
|
|||||||
Reference in New Issue
Block a user