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,6 +122,8 @@ 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 !self.cookies_loaded {
self.cookies_loaded = true;
if let Some(val) = self.headers.get(header::COOKIE) { if let Some(val) = self.headers.get(header::COOKIE) {
let s = str::from_utf8(val.as_bytes()) let s = str::from_utf8(val.as_bytes())
.map_err(CookieParseError::from)?; .map_err(CookieParseError::from)?;
@ -126,6 +131,7 @@ impl HttpRequest {
self.cookies.push(Cookie::parse_encoded(cookie)?.into_owned()); self.cookies.push(Cookie::parse_encoded(cookie)?.into_owned());
} }
} }
}
Ok(&self.cookies) Ok(&self.cookies)
} }