refactor(header): change Header::fmt_header to take a header::Formatter
The `header::Formatter` ensures that a formatted header is written to a line, and allows for headers that require multiple lines. The only header to specifically require this is `Set-Cookie`. BREAKING CHANGE: The `fmt_header` method has changed to take a different formatter. In most cases, if your header also implements `fmt::Display`, you can just call `f.fmt_line(self)`.
This commit is contained in:
@@ -63,14 +63,14 @@ impl Header for AccessControlAllowCredentials {
|
||||
Err(::Error::Header)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.write_str("true")
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for AccessControlAllowCredentials {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
self.fmt_header(f)
|
||||
f.write_str("true")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,18 +72,18 @@ impl Header for AccessControlAllowOrigin {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match *self {
|
||||
AccessControlAllowOrigin::Any => f.write_str("*"),
|
||||
AccessControlAllowOrigin::Null => f.write_str("null"),
|
||||
AccessControlAllowOrigin::Value(ref url) => Display::fmt(url, f),
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for AccessControlAllowOrigin {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
self.fmt_header(f)
|
||||
match *self {
|
||||
AccessControlAllowOrigin::Any => f.write_str("*"),
|
||||
AccessControlAllowOrigin::Null => f.write_str("null"),
|
||||
AccessControlAllowOrigin::Value(ref url) => Display::fmt(url, f),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -100,8 +100,8 @@ impl<S: Scheme + Any> Header for Authorization<S> where <S as FromStr>::Err: 'st
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ pub struct CacheControl(pub Vec<CacheDirective>);
|
||||
|
||||
__hyper__deref!(CacheControl => Vec<CacheDirective>);
|
||||
|
||||
//TODO: this could just be the header! macro
|
||||
impl Header for CacheControl {
|
||||
fn header_name() -> &'static str {
|
||||
static NAME: &'static str = "Cache-Control";
|
||||
@@ -64,8 +65,8 @@ impl Header for CacheControl {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -146,8 +146,8 @@ impl Header for ContentDisposition {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(&self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -60,8 +60,8 @@ impl Header for ContentLength {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(&self.0, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,8 +54,8 @@ impl Header for Cookie {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,8 +54,8 @@ impl Header for Expect {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -68,17 +68,17 @@ impl Header for Host {
|
||||
from_one_raw_str(raw)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self.port {
|
||||
None | Some(80) | Some(443) => f.write_str(&self.hostname[..]),
|
||||
Some(port) => write!(f, "{}:{}", self.hostname, port)
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Host {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
self.fmt_header(f)
|
||||
match self.port {
|
||||
None | Some(80) | Some(443) => f.write_str(&self.hostname[..]),
|
||||
Some(port) => write!(f, "{}:{}", self.hostname, port)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -70,17 +70,17 @@ impl Header for IfRange {
|
||||
Err(::Error::Header)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
match *self {
|
||||
IfRange::EntityTag(ref x) => Display::fmt(x, f),
|
||||
IfRange::Date(ref x) => Display::fmt(x, f),
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> ::std::fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for IfRange {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
self.fmt_header(f)
|
||||
match *self {
|
||||
IfRange::EntityTag(ref x) => Display::fmt(x, f),
|
||||
IfRange::Date(ref x) => Display::fmt(x, f),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -423,14 +423,14 @@ impl Header for Link {
|
||||
.unwrap_or(Err(::Error::Header))
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt_delimited(f, self.values.as_slice(), ", ", ("", ""))
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Link {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
self.fmt_header(f)
|
||||
fmt_delimited(f, self.values.as_slice(), ", ", ("", ""))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -204,14 +204,13 @@ macro_rules! header {
|
||||
fn parse_header(raw: &$crate::header::Raw) -> $crate::Result<Self> {
|
||||
$crate::header::parsing::from_comma_delimited(raw).map($id)
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
$crate::header::parsing::fmt_comma_delimited(f, &self.0[..])
|
||||
fn fmt_header(&self, f: &mut $crate::header::Formatter) -> ::std::fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
impl ::std::fmt::Display for $id {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
use $crate::header::Header;
|
||||
self.fmt_header(f)
|
||||
$crate::header::parsing::fmt_comma_delimited(f, &self.0[..])
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -229,14 +228,13 @@ macro_rules! header {
|
||||
fn parse_header(raw: &$crate::header::Raw) -> $crate::Result<Self> {
|
||||
$crate::header::parsing::from_comma_delimited(raw).map($id)
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
$crate::header::parsing::fmt_comma_delimited(f, &self.0[..])
|
||||
fn fmt_header(&self, f: &mut $crate::header::Formatter) -> ::std::fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
impl ::std::fmt::Display for $id {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
use $crate::header::Header;
|
||||
self.fmt_header(f)
|
||||
$crate::header::parsing::fmt_comma_delimited(f, &self.0[..])
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -254,8 +252,8 @@ macro_rules! header {
|
||||
fn parse_header(raw: &$crate::header::Raw) -> $crate::Result<Self> {
|
||||
$crate::header::parsing::from_one_raw_str(raw).map($id)
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
::std::fmt::Display::fmt(&**self, f)
|
||||
fn fmt_header(&self, f: &mut $crate::header::Formatter) -> ::std::fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
impl ::std::fmt::Display for $id {
|
||||
@@ -289,8 +287,8 @@ macro_rules! header {
|
||||
fn parse_header(raw: &$crate::header::Raw) -> $crate::Result<Self> {
|
||||
$crate::header::parsing::from_one_raw_str::<<$value as ::std::borrow::ToOwned>::Owned>(raw).map($id::new)
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
::std::fmt::Display::fmt(&**self, f)
|
||||
fn fmt_header(&self, f: &mut $crate::header::Formatter) -> ::std::fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
impl ::std::fmt::Display for $id {
|
||||
@@ -323,7 +321,12 @@ macro_rules! header {
|
||||
}
|
||||
$crate::header::parsing::from_comma_delimited(raw).map($id::Items)
|
||||
}
|
||||
fn fmt_header(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
fn fmt_header(&self, f: &mut $crate::header::Formatter) -> ::std::fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
impl ::std::fmt::Display for $id {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
match *self {
|
||||
$id::Any => f.write_str("*"),
|
||||
$id::Items(ref fields) => $crate::header::parsing::fmt_comma_delimited(
|
||||
@@ -331,12 +334,6 @@ macro_rules! header {
|
||||
}
|
||||
}
|
||||
}
|
||||
impl ::std::fmt::Display for $id {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
use $crate::header::Header;
|
||||
self.fmt_header(f)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// optional test module
|
||||
|
||||
@@ -104,8 +104,8 @@ impl Header for Origin {
|
||||
from_one_raw_str(raw)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,8 +54,8 @@ impl Header for Pragma {
|
||||
})
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,8 +65,8 @@ impl Header for Prefer {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -63,8 +63,8 @@ impl Header for PreferenceApplied {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -190,8 +190,8 @@ impl Header for Range {
|
||||
from_one_raw_str(raw)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -79,8 +79,8 @@ impl Header for ReferrerPolicy {
|
||||
Err(::Error::Header)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -121,7 +121,13 @@ impl Header for RetryAfter {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> ::std::fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for RetryAfter {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match *self {
|
||||
RetryAfter::Delay(ref duration) => {
|
||||
write!(f, "{}", duration.num_seconds())
|
||||
|
||||
@@ -91,16 +91,7 @@ impl Header for SetCookie {
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
if self.0.len() == 1 {
|
||||
write!(f, "{}", &self.0[0])
|
||||
} else {
|
||||
panic!("SetCookie with multiple cookies cannot be used with fmt_header, must use fmt_multi_header");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn fmt_multi_header(&self, f: &mut ::header::MultilineFormatter) -> fmt::Result {
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
for cookie in &self.0 {
|
||||
try!(f.fmt_line(cookie));
|
||||
}
|
||||
|
||||
@@ -129,8 +129,8 @@ impl Header for StrictTransportSecurity {
|
||||
parsing::from_one_raw_str(raw)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(self, f)
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,13 @@ impl Header for Warning {
|
||||
from_one_raw_str(raw)
|
||||
}
|
||||
|
||||
fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fn fmt_header(&self, f: &mut ::header::Formatter) -> fmt::Result {
|
||||
f.fmt_line(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Warning {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self.date {
|
||||
Some(date) => write!(f, "{:03} {} \"{}\" \"{}\"", self.code, self.agent, self.text, date),
|
||||
None => write!(f, "{:03} {} \"{}\"", self.code, self.agent, self.text)
|
||||
|
||||
Reference in New Issue
Block a user