From dc045f0a13fa5a6963229f5c2dab98572ca09a95 Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Mon, 18 Jun 2018 14:04:50 +0200 Subject: [PATCH] Remove special casing for empty cookie list The cookie crate already does that, so no need for actix-web to do it. --- src/client/request.rs | 34 ++++++++++++----------------- src/httpresponse.rs | 50 +++++++++++++------------------------------ 2 files changed, 29 insertions(+), 55 deletions(-) diff --git a/src/client/request.rs b/src/client/request.rs index bc8feb3e7..33bac36fc 100644 --- a/src/client/request.rs +++ b/src/client/request.rs @@ -131,7 +131,7 @@ impl ClientRequest { ClientRequestBuilder { request: Some(ClientRequest::default()), err: None, - cookies: None, + cookies: CookieJar::new(), default_headers: true, } } @@ -274,7 +274,7 @@ impl fmt::Debug for ClientRequest { pub struct ClientRequestBuilder { request: Option, err: Option, - cookies: Option, + cookies: CookieJar, default_headers: bool, } @@ -496,13 +496,7 @@ impl ClientRequestBuilder { /// } /// ``` pub fn cookie<'c>(&mut self, cookie: Cookie<'c>) -> &mut Self { - if self.cookies.is_none() { - let mut jar = CookieJar::new(); - jar.add(cookie.into_owned()); - self.cookies = Some(jar) - } else { - self.cookies.as_mut().unwrap().add(cookie.into_owned()); - } + self.cookies.add(cookie.into_owned()); self } @@ -626,13 +620,13 @@ impl ClientRequestBuilder { let mut request = self.request.take().expect("cannot reuse request builder"); // set cookies - if let Some(ref mut jar) = self.cookies { - let mut cookie = String::new(); - for c in jar.delta() { - let name = percent_encode(c.name().as_bytes(), USERINFO_ENCODE_SET); - let value = percent_encode(c.value().as_bytes(), USERINFO_ENCODE_SET); - let _ = write!(&mut cookie, "; {}={}", name, value); - } + let mut cookie = String::new(); + for c in self.cookies.delta() { + let name = percent_encode(c.name().as_bytes(), USERINFO_ENCODE_SET); + let value = percent_encode(c.value().as_bytes(), USERINFO_ENCODE_SET); + let _ = write!(&mut cookie, "; {}={}", name, value); + } + if !cookie.is_empty() { request.headers.insert( header::COOKIE, HeaderValue::from_str(&cookie.as_str()[2..]).unwrap(), @@ -659,13 +653,13 @@ impl ClientRequestBuilder { self.body(body) } - + /// Set a urlencoded body and generate `ClientRequest` /// /// `ClientRequestBuilder` can not be used after this call. pub fn form(&mut self, value: T) -> Result { let body = serde_urlencoded::to_string(&value)?; - + let contains = if let Some(parts) = parts(&mut self.request, &self.err) { parts.headers.contains_key(header::CONTENT_TYPE) } else { @@ -674,7 +668,7 @@ impl ClientRequestBuilder { if !contains { self.header(header::CONTENT_TYPE, "application/x-www-form-urlencoded"); } - + self.body(body) } @@ -703,7 +697,7 @@ impl ClientRequestBuilder { ClientRequestBuilder { request: self.request.take(), err: self.err.take(), - cookies: self.cookies.take(), + cookies: mem::replace(&mut self.cookies, CookieJar::new()), default_headers: self.default_headers, } } diff --git a/src/httpresponse.rs b/src/httpresponse.rs index a0eb46a6c..4617d7c70 100644 --- a/src/httpresponse.rs +++ b/src/httpresponse.rs @@ -98,15 +98,9 @@ impl HttpResponse { #[inline] pub fn into_builder(mut self) -> HttpResponseBuilder { // If this response has cookies, load them into a jar - let mut jar: Option = None; + let mut jar = CookieJar::new(); for c in self.cookies() { - if let Some(ref mut j) = jar { - j.add_original(c.into_owned()); - } else { - let mut j = CookieJar::new(); - j.add_original(c.into_owned()); - jar = Some(j); - } + jar.add_original(c.into_owned()); } let response = self.0.take(); @@ -352,7 +346,7 @@ pub struct HttpResponseBuilder { response: Option>, pool: Option>>, err: Option, - cookies: Option, + cookies: CookieJar, } impl HttpResponseBuilder { @@ -546,13 +540,7 @@ impl HttpResponseBuilder { /// } /// ``` pub fn cookie<'c>(&mut self, cookie: Cookie<'c>) -> &mut Self { - if self.cookies.is_none() { - let mut jar = CookieJar::new(); - jar.add(cookie.into_owned()); - self.cookies = Some(jar) - } else { - self.cookies.as_mut().unwrap().add(cookie.into_owned()); - } + self.cookies.add(cookie.into_owned()); self } @@ -573,15 +561,9 @@ impl HttpResponseBuilder { /// } /// ``` pub fn del_cookie<'a>(&mut self, cookie: &Cookie<'a>) -> &mut Self { - { - if self.cookies.is_none() { - self.cookies = Some(CookieJar::new()) - } - let jar = self.cookies.as_mut().unwrap(); - let cookie = cookie.clone().into_owned(); - jar.add_original(cookie.clone()); - jar.remove(cookie); - } + let cookie = cookie.clone().into_owned(); + self.cookies.add_original(cookie.clone()); + self.cookies.remove(cookie); self } @@ -631,13 +613,11 @@ impl HttpResponseBuilder { return Error::from(e).into(); } let mut response = self.response.take().expect("cannot reuse response builder"); - if let Some(ref jar) = self.cookies { - for cookie in jar.delta() { - match HeaderValue::from_str(&cookie.to_string()) { - Ok(val) => response.headers.append(header::SET_COOKIE, val), - Err(e) => return Error::from(e).into(), - }; - } + for cookie in self.cookies.delta() { + match HeaderValue::from_str(&cookie.to_string()) { + Ok(val) => response.headers.append(header::SET_COOKIE, val), + Err(e) => return Error::from(e).into(), + }; } response.body = body.into(); HttpResponse(Some(response), self.pool.take().unwrap()) @@ -691,7 +671,7 @@ impl HttpResponseBuilder { response: self.response.take(), pool: self.pool.take(), err: self.err.take(), - cookies: self.cookies.take(), + cookies: mem::replace(&mut self.cookies, CookieJar::new()), } } } @@ -939,7 +919,7 @@ impl HttpResponsePool { response: Some(msg), pool: Some(Rc::clone(pool)), err: None, - cookies: None, + cookies: CookieJar::new(), } } else { let msg = Box::new(InnerHttpResponse::new(status, Body::Empty)); @@ -947,7 +927,7 @@ impl HttpResponsePool { response: Some(msg), pool: Some(Rc::clone(pool)), err: None, - cookies: None, + cookies: CookieJar::new(), } } }