mirror of https://github.com/rwf2/Rocket.git
parent
32e2ff4d6b
commit
64ba2056ef
|
@ -1,4 +1,4 @@
|
||||||
use std::cell::RefCell;
|
use std::sync::RwLock;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
use Rocket;
|
use Rocket;
|
||||||
|
@ -53,7 +53,7 @@ use error::LaunchError;
|
||||||
/// [`post`]: #method.post
|
/// [`post`]: #method.post
|
||||||
pub struct Client {
|
pub struct Client {
|
||||||
rocket: Rocket,
|
rocket: Rocket,
|
||||||
crate cookies: Option<RefCell<CookieJar>>,
|
crate cookies: Option<RwLock<CookieJar>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Client {
|
impl Client {
|
||||||
|
@ -62,7 +62,7 @@ impl Client {
|
||||||
/// set to `None`.
|
/// set to `None`.
|
||||||
fn _new(rocket: Rocket, tracked: bool) -> Result<Client, LaunchError> {
|
fn _new(rocket: Rocket, tracked: bool) -> Result<Client, LaunchError> {
|
||||||
let cookies = match tracked {
|
let cookies = match tracked {
|
||||||
true => Some(RefCell::new(CookieJar::new())),
|
true => Some(RwLock::new(CookieJar::new())),
|
||||||
false => None
|
false => None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -321,3 +321,15 @@ impl Client {
|
||||||
LocalRequest::new(self, method, uri.into())
|
LocalRequest::new(self, method, uri.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::Client;
|
||||||
|
|
||||||
|
fn assert_sync<T: Sync>() {}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_local_client_impl_sync() {
|
||||||
|
assert_sync::<Client>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -111,7 +111,8 @@ impl<'c> LocalRequest<'c> {
|
||||||
|
|
||||||
// Set up any cookies we know about.
|
// Set up any cookies we know about.
|
||||||
if let Some(ref jar) = client.cookies {
|
if let Some(ref jar) = client.cookies {
|
||||||
for cookie in jar.borrow().iter() {
|
let cookies = jar.read().expect("LocalRequest::new() read lock");
|
||||||
|
for cookie in cookies.iter() {
|
||||||
request.cookies().add_original(cookie.clone().into_owned());
|
request.cookies().add_original(cookie.clone().into_owned());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -408,7 +409,7 @@ impl<'c> LocalRequest<'c> {
|
||||||
// If the client is tracking cookies, updates the internal cookie jar
|
// If the client is tracking cookies, updates the internal cookie jar
|
||||||
// with the changes reflected by `response`.
|
// with the changes reflected by `response`.
|
||||||
if let Some(ref jar) = client.cookies {
|
if let Some(ref jar) = client.cookies {
|
||||||
let mut jar = jar.borrow_mut();
|
let mut jar = jar.write().expect("LocalRequest::_dispatch() write lock");
|
||||||
let current_time = ::time::now();
|
let current_time = ::time::now();
|
||||||
for cookie in response.cookies() {
|
for cookie in response.cookies() {
|
||||||
if let Some(expires) = cookie.expires() {
|
if let Some(expires) = cookie.expires() {
|
||||||
|
|
Loading…
Reference in New Issue