diff --git a/src/header/common/authorization.rs b/src/header/common/authorization.rs index b4c99fc8e6..fa222f4808 100644 --- a/src/header/common/authorization.rs +++ b/src/header/common/authorization.rs @@ -101,6 +101,12 @@ impl Header for Authorization where ::Err: 'st } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for Authorization { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { if let Some(scheme) = ::scheme() { try!(write!(f, "{} ", scheme)) }; @@ -152,7 +158,6 @@ impl Scheme for Basic { if let Some(ref pass) = self.password { text.push_str(&pass[..]); } - f.write_str(&encode(text.as_ref())) } } @@ -193,25 +198,25 @@ impl FromStr for Basic { #[derive(Clone, PartialEq, Debug)] ///Token holder for Bearer Authentication, most often seen with oauth pub struct Bearer { - ///Actual bearer token as a string - pub token: String + ///Actual bearer token as a string + pub token: String } impl Scheme for Bearer { - fn scheme() -> Option<&'static str> { - Some("Bearer") - } + fn scheme() -> Option<&'static str> { + Some("Bearer") + } - fn fmt_scheme(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", self.token) - } + fn fmt_scheme(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.token) + } } impl FromStr for Bearer { - type Err = ::Error; - fn from_str(s: &str) -> ::Result { - Ok(Bearer { token: s.to_owned()}) - } + type Err = ::Error; + fn from_str(s: &str) -> ::Result { + Ok(Bearer { token: s.to_owned()}) + } } #[cfg(test)] @@ -265,7 +270,7 @@ mod tests { assert_eq!(auth.0.password, Some("".to_owned())); } - #[test] + #[test] fn test_bearer_auth() { let mut headers = Headers::new(); headers.set(Authorization( diff --git a/src/header/common/cache_control.rs b/src/header/common/cache_control.rs index d79f20f600..6698265627 100644 --- a/src/header/common/cache_control.rs +++ b/src/header/common/cache_control.rs @@ -65,6 +65,12 @@ impl Header for CacheControl { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for CacheControl { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fmt_comma_delimited(f, &self[..]) } } diff --git a/src/header/common/cookie.rs b/src/header/common/cookie.rs index 405a359c67..057fdf3bbf 100644 --- a/src/header/common/cookie.rs +++ b/src/header/common/cookie.rs @@ -55,6 +55,12 @@ impl Header for Cookie { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for Cookie { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let cookies = &self.0; for (i, cookie) in cookies.iter().enumerate() { if i != 0 { @@ -63,6 +69,7 @@ impl Header for Cookie { try!(Display::fmt(&cookie, f)); } Ok(()) + } } diff --git a/src/header/common/expect.rs b/src/header/common/expect.rs index f80ede3190..5324e11545 100644 --- a/src/header/common/expect.rs +++ b/src/header/common/expect.rs @@ -55,6 +55,12 @@ impl Header for Expect { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for Expect { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str("100-continue") } } diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index cce1573593..961e42c6f0 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -85,9 +85,8 @@ macro_rules! bench_header( fn bench_format(b: &mut Bencher) { let raw = $value.into(); let val: $ty = Header::parse_header(&raw).unwrap(); - let fmt = ::header::HeaderFormatter(&val); b.iter(|| { - format!("{}", fmt); + format!("{}", val); }); } } diff --git a/src/header/common/origin.rs b/src/header/common/origin.rs index 496455a610..82bb346ef3 100644 --- a/src/header/common/origin.rs +++ b/src/header/common/origin.rs @@ -59,7 +59,7 @@ impl Header for Origin { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}://{}", self.scheme, self.host) + fmt::Display::fmt(self, f) } } @@ -83,6 +83,12 @@ impl FromStr for Origin { } } +impl fmt::Display for Origin { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}://{}", self.scheme, self.host) + } +} + impl PartialEq for Origin { fn eq(&self, other: &Origin) -> bool { self.scheme == other.scheme && self.host == other.host diff --git a/src/header/common/pragma.rs b/src/header/common/pragma.rs index 7ba347f9e6..9c4fc0947b 100644 --- a/src/header/common/pragma.rs +++ b/src/header/common/pragma.rs @@ -55,6 +55,12 @@ impl Header for Pragma { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for Pragma { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(match *self { Pragma::NoCache => "no-cache", Pragma::Ext(ref string) => &string[..], diff --git a/src/header/common/prefer.rs b/src/header/common/prefer.rs index 5e14e1f22f..856d02c056 100644 --- a/src/header/common/prefer.rs +++ b/src/header/common/prefer.rs @@ -66,6 +66,12 @@ impl Header for Prefer { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for Prefer { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fmt_comma_delimited(f, &self[..]) } } diff --git a/src/header/common/preference_applied.rs b/src/header/common/preference_applied.rs index 9c07f0d73f..328a7d7b78 100644 --- a/src/header/common/preference_applied.rs +++ b/src/header/common/preference_applied.rs @@ -64,6 +64,13 @@ impl Header for PreferenceApplied { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for PreferenceApplied { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + //TODO: format this without allocating a Vec and cloning contents let preferences: Vec<_> = self.0.iter().map(|pref| match pref { // The spec ignores parameters in `Preferences-Applied` &Preference::Extension(ref name, ref value, _) => Preference::Extension( diff --git a/src/header/common/referrer_policy.rs b/src/header/common/referrer_policy.rs index 6483fe1550..fb5490471c 100644 --- a/src/header/common/referrer_policy.rs +++ b/src/header/common/referrer_policy.rs @@ -80,6 +80,12 @@ impl Header for ReferrerPolicy { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for ReferrerPolicy { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { use self::ReferrerPolicy::*; f.write_str(match *self { NoReferrer => "no-referrer", diff --git a/src/header/common/strict_transport_security.rs b/src/header/common/strict_transport_security.rs index 491ffaf660..0ff52b13b8 100644 --- a/src/header/common/strict_transport_security.rs +++ b/src/header/common/strict_transport_security.rs @@ -130,6 +130,12 @@ impl Header for StrictTransportSecurity { } fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for StrictTransportSecurity { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { if self.include_subdomains { write!(f, "max-age={}; includeSubdomains", self.max_age) } else {