pub trait Header: 'static + HeaderClone + Send + Sync {
fn header_name() -> &'static str
where
Self: Sized;
fn parse_header(raw: &Raw) -> Result<Self, Error>
where
Self: Sized;
fn fmt_header(&self, f: &mut Formatter<'_, '_>) -> Result<(), Error>;
}
Expand description
A trait for any object that will represent a header field and value.
This trait represents the construction and identification of headers, and contains trait-object unsafe methods.
Required Methods
sourcefn header_name() -> &'static strwhere
Self: Sized,
fn header_name() -> &'static strwhere
Self: Sized,
Returns the name of the header field this belongs to.
This will become an associated constant once available.
sourcefn parse_header(raw: &Raw) -> Result<Self, Error>where
Self: Sized,
fn parse_header(raw: &Raw) -> Result<Self, Error>where
Self: Sized,
Parse a header from a raw stream of bytes.
It’s possible that a request can include a header field more than once,
and in that case, the slice will have a length greater than 1. However,
it’s not necessarily the case that a Header is allowed to have more
than one field value. If that’s the case, you should return None
if raw.len() > 1
.
sourcefn fmt_header(&self, f: &mut Formatter<'_, '_>) -> Result<(), Error>
fn fmt_header(&self, f: &mut Formatter<'_, '_>) -> Result<(), Error>
Format a header to outgoing stream.
Most headers should be formatted on one line, and so a common pattern
would be to implement std::fmt::Display
for this type as well, and
then just call f.fmt_line(self)
.
Note
This has the ability to format a header over multiple lines.
The main example here is Set-Cookie
, which requires that every
cookie being set be specified in a separate line. Almost every other
case should only format as 1 single line.