add referer header definition

This commit is contained in:
Konstantin Stepanov
2015-01-11 02:19:29 +03:00
parent 5a5ef10f35
commit df857aa3f8
2 changed files with 40 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ pub use self::user_agent::UserAgent;
pub use self::vary::Vary; pub use self::vary::Vary;
pub use self::server::Server; pub use self::server::Server;
pub use self::set_cookie::SetCookie; pub use self::set_cookie::SetCookie;
pub use self::referer::Referer;
macro_rules! bench_header( macro_rules! bench_header(
($name:ident, $ty:ty, $value:expr) => { ($name:ident, $ty:ty, $value:expr) => {
@@ -144,3 +145,7 @@ pub mod user_agent;
/// Exposes the Vary header. /// Exposes the Vary header.
pub mod vary; pub mod vary;
/// Exposes the Referer header
pub mod referer;

View File

@@ -0,0 +1,35 @@
use header::{Header, HeaderFormat};
use std::fmt::{self, Show};
use header::shared::util::from_one_raw_str;
/// The `Referer` header.
///
/// The Referer header is used by user agents to inform server about
/// the page URL user has came from.
///
/// See alse [RFC 1945, section 10.13](http://tools.ietf.org/html/rfc1945#section-10.13).
///
/// Currently just a string, but maybe better replace it with url::Url or something like it.
#[derive(Clone, PartialEq, Show)]
pub struct Referer(pub String);
deref!(Referer => String);
impl Header for Referer {
fn header_name(_: Option<Referer>) -> &'static str {
"Referer"
}
fn parse_header(raw: &[Vec<u8>]) -> Option<Referer> {
from_one_raw_str(raw).map(|s| Referer(s))
}
}
impl HeaderFormat for Referer {
fn fmt_header(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
let Referer(ref value) = *self;
value.fmt(fmt)
}
}
bench_header!(bench, Referer, { vec![b"http://foo.com/hello:3000".to_vec()] });