From c9f4ff33821df1bff557dfddac1ba3fc6255ee62 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Thu, 13 Jul 2017 20:25:03 +1000 Subject: [PATCH] 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 f89c249c70..0000000000 --- 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 0000000000..6af16abd22 --- /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 13396272e3..ebdc4a0b42 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 54fc5dcb64..42b92b37a3 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