From 1b180dd61a6a72697443ef1766e87812873d8b58 Mon Sep 17 00:00:00 2001 From: hag Date: Mon, 10 Apr 2017 11:11:33 +0200 Subject: [PATCH] refactor(header): make Originheader more allocator friendly Change the internal representation of Origin to be more allocator friendly. The internals of the Origin header are now private to allow changing them in the future. BREAKING CHANGES: - Old code that accesses the Origin struct directly will stop working. --- src/header/common/origin.rs | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/header/common/origin.rs b/src/header/common/origin.rs index 985972b2..dbfbf235 100644 --- a/src/header/common/origin.rs +++ b/src/header/common/origin.rs @@ -1,4 +1,5 @@ use header::{Header, Raw, Host}; +use std::borrow::Cow; use std::fmt; use std::str::FromStr; use header::parsing::from_one_raw_str; @@ -33,19 +34,39 @@ use header::parsing::from_one_raw_str; #[derive(Clone, Debug)] pub struct Origin { /// The scheme, such as http or https - pub scheme: String, + scheme: Cow<'static,str>, /// The host, such as Host{hostname: "hyper.rs".to_owned(), port: None} - pub host: Host, + host: Host, } impl Origin { /// Creates a new `Origin` header. - pub fn new, H: Into>(scheme: S, hostname: H, port: Option) -> Origin{ + pub fn new>, H: Into>>(scheme: S, hostname: H, port: Option) -> Origin{ Origin { scheme: scheme.into(), - host: Host::new(hostname.into(), port), + host: Host::new(hostname, port), } } + + /// The scheme, such as http or https + /// ``` + /// use hyper::header::Origin; + /// let origin = Origin::new("https", "foo.com", Some(443)); + /// assert_eq!(origin.scheme(), "https"); + /// ``` + pub fn scheme(&self) -> &str { + &(self.scheme) + } + + /// The host, such as Host{hostname: "hyper.rs".to_owned(), port: None} + /// ``` + /// use hyper::header::{Origin,Host}; + /// let origin = Origin::new("https", "foo.com", Some(443)); + /// assert_eq!(origin.host(), &Host::new("foo.com", Some(443))); + /// ``` + pub fn host(&self) -> &Host { + &(self.host) + } } impl Header for Origin { @@ -77,7 +98,7 @@ impl FromStr for Origin { Ok(Origin{ - scheme: scheme.to_owned(), + scheme: scheme.to_owned().into(), host: host }) }