From 2a49cee7b26ec037eaf066a552023a7f50262ecd Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Thu, 13 Jul 2017 20:06:26 +1000 Subject: [PATCH 1/2] chore(headers): Sort header imports alphabetically This should make it easier to see missing imports in the future --- src/header/common/mod.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index d1b8f358..13396272 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -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; @@ -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; @@ -40,9 +40,10 @@ 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_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; @@ -60,7 +61,6 @@ 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] @@ -438,6 +438,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; @@ -447,14 +451,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; @@ -463,6 +462,7 @@ mod content_length; mod content_location; mod content_range; mod content_type; +mod cookie; mod date; mod etag; mod expect; @@ -475,6 +475,7 @@ mod if_none_match; mod if_range; mod if_unmodified_since; mod last_modified; +mod link; mod location; mod origin; mod pragma; @@ -492,4 +493,3 @@ mod upgrade; mod user_agent; mod vary; mod warning; -mod link; From c9f4ff33821df1bff557dfddac1ba3fc6255ee62 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Thu, 13 Jul 2017 20:25:03 +1000 Subject: [PATCH 2/2] feat(headers): export missing header types --- src/header/common/last-event-id.rs | 30 -------------- src/header/common/last_event_id.rs | 63 ++++++++++++++++++++++++++++++ src/header/common/mod.rs | 4 ++ src/header/common/te.rs | 14 +++---- 4 files changed, 74 insertions(+), 37 deletions(-) delete mode 100644 src/header/common/last-event-id.rs create mode 100644 src/header/common/last_event_id.rs diff --git a/src/header/common/last-event-id.rs b/src/header/common/last-event-id.rs deleted file mode 100644 index f89c249c..00000000 --- a/src/header/common/last-event-id.rs +++ /dev/null @@ -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()))); - } -} diff --git a/src/header/common/last_event_id.rs b/src/header/common/last_event_id.rs new file mode 100644 index 00000000..6af16abd --- /dev/null +++ b/src/header/common/last_event_id.rs @@ -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 { + 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()))); +}); diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index 13396272..ebdc4a0b 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -42,6 +42,7 @@ pub use self::if_modified_since::IfModifiedSince; pub use self::if_none_match::IfNoneMatch; 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; @@ -56,6 +57,7 @@ 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; @@ -474,6 +476,7 @@ 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; @@ -488,6 +491,7 @@ mod retry_after; mod server; mod set_cookie; mod strict_transport_security; +mod te; mod transfer_encoding; mod upgrade; mod user_agent; diff --git a/src/header/common/te.rs b/src/header/common/te.rs index 54fc5dcb..42b92b37 100644 --- a/src/header/common/te.rs +++ b/src/header/common/te.rs @@ -25,19 +25,19 @@ 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), @@ -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(); /// 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)* + (Te, "TE") => (QualityItem)* test_te { // From the RFC