Skip to content

Commit

Permalink
Merge pull request hyperium#1256 from brendanzab/add-missing-headers
Browse files Browse the repository at this point in the history
feat(headers): Add missing headers
  • Loading branch information
seanmonstar authored Jul 17, 2017
2 parents fc5b9cc + c9f4ff3 commit 89f7803
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 50 deletions.
30 changes: 0 additions & 30 deletions src/header/common/last-event-id.rs

This file was deleted.

63 changes: 63 additions & 0 deletions src/header/common/last_event_id.rs
Original file line number Diff line number Diff line change
@@ -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())));
});
30 changes: 17 additions & 13 deletions src/header/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
//! strongly-typed theme, the [mime](https://docs.rs/mime) crate
//! 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::access_control_allow_credentials::AccessControlAllowCredentials;
pub use self::access_control_allow_headers::AccessControlAllowHeaders;
Expand All @@ -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_request_headers::AccessControlRequestHeaders;
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::authorization::{Authorization, Scheme, Basic, Bearer};
pub use self::cache_control::{CacheControl, CacheDirective};
pub use self::connection::{Connection, ConnectionOption};
pub use self::content_disposition::{ContentDisposition, DispositionType, DispositionParam};
pub use self::content_length::ContentLength;
pub use self::content_encoding::ContentEncoding;
pub use self::content_language::ContentLanguage;
pub use self::content_length::ContentLength;
pub use self::content_location::ContentLocation;
pub use self::content_range::{ContentRange, ContentRangeSpec};
pub use self::content_type::ContentType;
Expand All @@ -40,9 +40,11 @@ pub use self::host::Host;
pub use self::if_match::IfMatch;
pub use self::if_modified_since::IfModifiedSince;
pub use self::if_none_match::IfNoneMatch;
pub use self::if_unmodified_since::IfUnmodifiedSince;
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::link::{Link, LinkValue, RelationType, MediaDesc};
pub use self::location::Location;
pub use self::origin::Origin;
pub use self::pragma::Pragma;
Expand All @@ -55,12 +57,12 @@ pub use self::retry_after::RetryAfter;
pub use self::server::Server;
pub use self::set_cookie::SetCookie;
pub use self::strict_transport_security::StrictTransportSecurity;
pub use self::te::Te;
pub use self::transfer_encoding::TransferEncoding;
pub use self::upgrade::{Upgrade, Protocol, ProtocolName};
pub use self::user_agent::UserAgent;
pub use self::vary::Vary;
pub use self::warning::Warning;
pub use self::link::{Link, LinkValue, RelationType, MediaDesc};

#[doc(hidden)]
#[macro_export]
Expand Down Expand Up @@ -438,6 +440,10 @@ macro_rules! header {
}


mod accept_charset;
mod accept_encoding;
mod accept_language;
mod accept_ranges;
mod accept;
mod access_control_allow_credentials;
mod access_control_allow_headers;
Expand All @@ -447,14 +453,9 @@ mod access_control_expose_headers;
mod access_control_max_age;
mod access_control_request_headers;
mod access_control_request_method;
mod accept_charset;
mod accept_encoding;
mod accept_language;
mod accept_ranges;
mod allow;
mod authorization;
mod cache_control;
mod cookie;
mod connection;
mod content_disposition;
mod content_encoding;
Expand All @@ -463,6 +464,7 @@ mod content_length;
mod content_location;
mod content_range;
mod content_type;
mod cookie;
mod date;
mod etag;
mod expect;
Expand All @@ -474,7 +476,9 @@ mod if_modified_since;
mod if_none_match;
mod if_range;
mod if_unmodified_since;
mod last_event_id;
mod last_modified;
mod link;
mod location;
mod origin;
mod pragma;
Expand All @@ -487,9 +491,9 @@ mod retry_after;
mod server;
mod set_cookie;
mod strict_transport_security;
mod te;
mod transfer_encoding;
mod upgrade;
mod user_agent;
mod vary;
mod warning;
mod link;
14 changes: 7 additions & 7 deletions src/header/common/te.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,38 +25,38 @@ header! {
///
/// # Examples
/// ```
/// use hyper::header::{Headers, TE, Encoding, qitem};
/// use hyper::header::{Headers, Te, Encoding, qitem};
///
/// let mut headers = Headers::new();
/// 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();
/// headers.set(
/// TE(vec![
/// Te(vec![
/// qitem(Encoding::Trailers),
/// qitem(Encoding::Gzip),
/// qitem(Encoding::Deflate),
/// ])
/// );
/// ```
/// ```
/// use hyper::header::{Headers, TE, Encoding, QualityItem, q, qitem};
/// use hyper::header::{Headers, Te, Encoding, QualityItem, q, qitem};
///
/// let mut headers = Headers::new();
/// headers.set(
/// TE(vec![
/// Te(vec![
/// qitem(Encoding::Trailers),
/// QualityItem::new(Encoding::Gzip, q(600)),
/// QualityItem::new(Encoding::EncodingExt("*".to_owned()), q(0)),
/// ])
/// );
/// ```
(TE, "TE") => (QualityItem<Encoding>)*
(Te, "TE") => (QualityItem<Encoding>)*

test_te {
// From the RFC
Expand Down

0 comments on commit 89f7803

Please sign in to comment.