fix(header): enable SetCookie.fmt_header when only 1 cookie
This commit is contained in:
@@ -90,8 +90,13 @@ impl Header for SetCookie {
|
|||||||
Err(::Error::Header)
|
Err(::Error::Header)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn fmt_header(&self, _f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
panic!("SetCookie cannot be used with fmt_header, must use fmt_multi_header");
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -601,28 +601,32 @@ impl<'a> FromIterator<HeaderView<'a>> for Headers {
|
|||||||
impl<'a> fmt::Display for &'a (Header + Send + Sync) {
|
impl<'a> fmt::Display for &'a (Header + Send + Sync) {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
(**self).fmt_header(f)
|
let mut multi = MultilineFormatter(Multi::Join(true, f));
|
||||||
|
self.fmt_multi_header(&mut multi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A wrapper around any Header with a Display impl that calls `fmt_header`.
|
/// A wrapper around any Header with a Display impl that calls `fmt_header`.
|
||||||
///
|
///
|
||||||
/// This can be used like so: `format!("{}", HeaderFormatter(&header))` to
|
/// This can be used like so: `format!("{}", HeaderFormatter(&header))` to
|
||||||
/// get the representation of a Header which will be written to an
|
/// get the 'value string' representation of this Header.
|
||||||
/// outgoing `TcpStream`.
|
///
|
||||||
|
/// Note: This may not necessarily be the value written to stream, such
|
||||||
|
/// as with the SetCookie header.
|
||||||
pub struct HeaderFormatter<'a, H: Header>(pub &'a H);
|
pub struct HeaderFormatter<'a, H: Header>(pub &'a H);
|
||||||
|
|
||||||
impl<'a, H: Header> fmt::Display for HeaderFormatter<'a, H> {
|
impl<'a, H: Header> fmt::Display for HeaderFormatter<'a, H> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
self.0.fmt_header(f)
|
let mut multi = MultilineFormatter(Multi::Join(true, f));
|
||||||
|
self.0.fmt_multi_header(&mut multi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, H: Header> fmt::Debug for HeaderFormatter<'a, H> {
|
impl<'a, H: Header> fmt::Debug for HeaderFormatter<'a, H> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
self.0.fmt_header(f)
|
fmt::Display::fmt(self, f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user