Merge pull request #235 from kstep/referer-header
Add `Referer` header definition
This commit is contained in:
@@ -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) => {
|
||||||
@@ -202,3 +203,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;
|
||||||
|
|
||||||
|
|||||||
35
src/header/common/referer.rs
Normal file
35
src/header/common/referer.rs
Normal 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()] });
|
||||||
Reference in New Issue
Block a user