refactor(headers): Rename Cookies header to Cookie
				
					
				
			`Cookie` is the actual name of the header and since all other header structs use the exact camel-cased version of their name using a different name here is very inconvienient and confusing. You will encounter weird errors if you try to use `Cookie` as the header. For this reason rename `Cookies` as discussed on IRC with @seanmonstar and @reem and use `CookiePair` for real cookies. BREAKING CHANGE: Change header `Cookie` to `Cookie`
This commit is contained in:
		@@ -2,7 +2,7 @@ use header::{Header, HeaderFormat};
 | 
			
		||||
use std::fmt;
 | 
			
		||||
use std::str::from_utf8;
 | 
			
		||||
 | 
			
		||||
use cookie::Cookie;
 | 
			
		||||
use cookie::Cookie as CookiePair;
 | 
			
		||||
use cookie::CookieJar;
 | 
			
		||||
 | 
			
		||||
/// The `Cookie` header. Defined in [RFC6265](tools.ietf.org/html/rfc6265#section-5.4):
 | 
			
		||||
@@ -14,16 +14,16 @@ use cookie::CookieJar;
 | 
			
		||||
/// > When the user agent generates an HTTP request, the user agent MUST NOT
 | 
			
		||||
/// > attach more than one Cookie header field.
 | 
			
		||||
#[derive(Clone, PartialEq, Debug)]
 | 
			
		||||
pub struct Cookies(pub Vec<Cookie>);
 | 
			
		||||
pub struct Cookie(pub Vec<CookiePair>);
 | 
			
		||||
 | 
			
		||||
deref!(Cookies => Vec<Cookie>);
 | 
			
		||||
deref!(Cookie => Vec<CookiePair>);
 | 
			
		||||
 | 
			
		||||
impl Header for Cookies {
 | 
			
		||||
impl Header for Cookie {
 | 
			
		||||
    fn header_name() -> &'static str {
 | 
			
		||||
        "Cookie"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn parse_header(raw: &[Vec<u8>]) -> Option<Cookies> {
 | 
			
		||||
    fn parse_header(raw: &[Vec<u8>]) -> Option<Cookie> {
 | 
			
		||||
        let mut cookies = Vec::with_capacity(raw.len());
 | 
			
		||||
        for cookies_raw in raw.iter() {
 | 
			
		||||
            match from_utf8(&cookies_raw[]) {
 | 
			
		||||
@@ -40,14 +40,14 @@ impl Header for Cookies {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if !cookies.is_empty() {
 | 
			
		||||
            Some(Cookies(cookies))
 | 
			
		||||
            Some(Cookie(cookies))
 | 
			
		||||
        } else {
 | 
			
		||||
            None
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl HeaderFormat for Cookies {
 | 
			
		||||
impl HeaderFormat for Cookie {
 | 
			
		||||
    fn fmt_header(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
 | 
			
		||||
        let cookies = &self.0;
 | 
			
		||||
        let last = cookies.len() - 1;
 | 
			
		||||
@@ -61,7 +61,7 @@ impl HeaderFormat for Cookies {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Cookies {
 | 
			
		||||
impl Cookie {
 | 
			
		||||
    /// This method can be used to create CookieJar that can be used
 | 
			
		||||
    /// to manipulate cookies and create a corresponding `SetCookie` header afterwards.
 | 
			
		||||
    pub fn to_cookie_jar(&self, key: &[u8]) -> CookieJar<'static> {
 | 
			
		||||
@@ -74,8 +74,8 @@ impl Cookies {
 | 
			
		||||
 | 
			
		||||
    /// Extracts all cookies from `CookieJar` and creates Cookie header.
 | 
			
		||||
    /// Useful for clients.
 | 
			
		||||
    pub fn from_cookie_jar(jar: &CookieJar) -> Cookies {
 | 
			
		||||
        Cookies(jar.iter().collect())
 | 
			
		||||
    pub fn from_cookie_jar(jar: &CookieJar) -> Cookie {
 | 
			
		||||
        Cookie(jar.iter().collect())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -83,35 +83,34 @@ impl Cookies {
 | 
			
		||||
#[test]
 | 
			
		||||
fn test_parse() {
 | 
			
		||||
    let h = Header::parse_header(&[b"foo=bar; baz=quux".to_vec()][]);
 | 
			
		||||
    let c1 = Cookie::new("foo".to_string(), "bar".to_string());
 | 
			
		||||
    let c2 = Cookie::new("baz".to_string(), "quux".to_string());
 | 
			
		||||
    assert_eq!(h, Some(Cookies(vec![c1, c2])));
 | 
			
		||||
    let c1 = CookiePair::new("foo".to_string(), "bar".to_string());
 | 
			
		||||
    let c2 = CookiePair::new("baz".to_string(), "quux".to_string());
 | 
			
		||||
    assert_eq!(h, Some(Cookie(vec![c1, c2])));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn test_fmt() {
 | 
			
		||||
    use header::Headers;
 | 
			
		||||
 | 
			
		||||
    let mut cookie = Cookie::new("foo".to_string(), "bar".to_string());
 | 
			
		||||
    cookie.httponly = true;
 | 
			
		||||
    cookie.path = Some("/p".to_string());
 | 
			
		||||
    let cookies = Cookies(vec![cookie, Cookie::new("baz".to_string(), "quux".to_string())]);
 | 
			
		||||
    let mut cookie_pair = CookiePair::new("foo".to_string(), "bar".to_string());
 | 
			
		||||
    cookie_pair.httponly = true;
 | 
			
		||||
    cookie_pair.path = Some("/p".to_string());
 | 
			
		||||
    let cookie_header = Cookie(vec![cookie_pair, CookiePair::new("baz".to_string(), "quux".to_string())]);
 | 
			
		||||
    let mut headers = Headers::new();
 | 
			
		||||
    headers.set(cookies);
 | 
			
		||||
    headers.set(cookie_header);
 | 
			
		||||
 | 
			
		||||
    assert_eq!(&headers.to_string()[], "Cookie: foo=bar; baz=quux\r\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn cookie_jar() {
 | 
			
		||||
    let cookie = Cookie::new("foo".to_string(), "bar".to_string());
 | 
			
		||||
    let cookies = Cookies(vec![cookie]);
 | 
			
		||||
    let jar = cookies.to_cookie_jar(&[]);
 | 
			
		||||
    let new_cookies = Cookies::from_cookie_jar(&jar);
 | 
			
		||||
    let cookie_pair = CookiePair::new("foo".to_string(), "bar".to_string());
 | 
			
		||||
    let cookie_header = Cookie(vec![cookie_pair]);
 | 
			
		||||
    let jar = cookie_header.to_cookie_jar(&[]);
 | 
			
		||||
    let new_cookie_header = Cookie::from_cookie_jar(&jar);
 | 
			
		||||
 | 
			
		||||
    assert_eq!(cookies, new_cookies);
 | 
			
		||||
    assert_eq!(cookie_header, new_cookie_header);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bench_header!(bench, Cookies, { vec![b"foo=bar; baz=quux".to_vec()] });
 | 
			
		||||
 | 
			
		||||
bench_header!(bench, Cookie, { vec![b"foo=bar; baz=quux".to_vec()] });
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user