1
0
mirror of https://github.com/actix/actix-extras.git synced 2025-02-02 10:59:03 +01:00

store cookies load state

This commit is contained in:
Nikolay Kim 2017-11-08 21:01:56 -08:00
parent 2a319d733f
commit 51cd08ef57

View File

@ -23,6 +23,7 @@ pub struct HttpRequest {
headers: HeaderMap, headers: HeaderMap,
params: Params, params: Params,
cookies: Vec<Cookie<'static>>, cookies: Vec<Cookie<'static>>,
cookies_loaded: bool,
extensions: Extensions, extensions: Extensions,
} }
@ -40,6 +41,7 @@ impl HttpRequest {
headers: headers, headers: headers,
params: Params::empty(), params: Params::empty(),
cookies: Vec::new(), cookies: Vec::new(),
cookies_loaded: false,
extensions: Extensions::new(), extensions: Extensions::new(),
} }
} }
@ -53,6 +55,7 @@ impl HttpRequest {
headers: HeaderMap::new(), headers: HeaderMap::new(),
params: Params::empty(), params: Params::empty(),
cookies: Vec::new(), cookies: Vec::new(),
cookies_loaded: false,
extensions: Extensions::new(), extensions: Extensions::new(),
} }
} }
@ -119,11 +122,14 @@ impl HttpRequest {
/// Load cookies /// Load cookies
pub fn load_cookies(&mut self) -> Result<&Vec<Cookie>, CookieParseError> pub fn load_cookies(&mut self) -> Result<&Vec<Cookie>, CookieParseError>
{ {
if let Some(val) = self.headers.get(header::COOKIE) { if !self.cookies_loaded {
let s = str::from_utf8(val.as_bytes()) self.cookies_loaded = true;
.map_err(CookieParseError::from)?; if let Some(val) = self.headers.get(header::COOKIE) {
for cookie in s.split("; ") { let s = str::from_utf8(val.as_bytes())
self.cookies.push(Cookie::parse_encoded(cookie)?.into_owned()); .map_err(CookieParseError::from)?;
for cookie in s.split("; ") {
self.cookies.push(Cookie::parse_encoded(cookie)?.into_owned());
}
} }
} }
Ok(&self.cookies) Ok(&self.cookies)