-
-
Notifications
You must be signed in to change notification settings - Fork 119
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #76 from SergioBenitez/master
Overhaul `CookieJar`: more efficient, more secure, more docs.
- Loading branch information
Showing
12 changed files
with
1,219 additions
and
541 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
use std::ops::{Deref, DerefMut}; | ||
use std::hash::{Hash, Hasher}; | ||
use std::borrow::Borrow; | ||
|
||
use Cookie; | ||
|
||
/// A `DeltaCookie` is a helper structure used in a cookie jar. It wraps a | ||
/// `Cookie` so that it can be hashed and compared purely by name. It further | ||
/// records whether the wrapped cookie is a "removal" cookie, that is, a cookie | ||
/// that when sent to the client removes the named cookie on the client's | ||
/// machine. | ||
#[derive(Clone, Debug)] | ||
pub struct DeltaCookie { | ||
pub cookie: Cookie<'static>, | ||
pub removed: bool, | ||
} | ||
|
||
impl DeltaCookie { | ||
/// Create a new `DeltaCookie` that is being added to a jar. | ||
#[inline] | ||
pub fn added(cookie: Cookie<'static>) -> DeltaCookie { | ||
DeltaCookie { | ||
cookie: cookie, | ||
removed: false, | ||
} | ||
} | ||
|
||
/// Create a new `DeltaCookie` that is being removed from a jar. The | ||
/// `cookie` should be a "removal" cookie. | ||
#[inline] | ||
pub fn removed(cookie: Cookie<'static>) -> DeltaCookie { | ||
DeltaCookie { | ||
cookie: cookie, | ||
removed: true, | ||
} | ||
} | ||
} | ||
|
||
impl Deref for DeltaCookie { | ||
type Target = Cookie<'static>; | ||
|
||
fn deref(&self) -> &Cookie<'static> { | ||
&self.cookie | ||
} | ||
} | ||
|
||
impl DerefMut for DeltaCookie { | ||
fn deref_mut(&mut self) -> &mut Cookie<'static> { | ||
&mut self.cookie | ||
} | ||
} | ||
|
||
impl PartialEq for DeltaCookie { | ||
fn eq(&self, other: &DeltaCookie) -> bool { | ||
self.name() == other.name() | ||
} | ||
} | ||
|
||
impl Eq for DeltaCookie {} | ||
|
||
impl Hash for DeltaCookie { | ||
fn hash<H: Hasher>(&self, state: &mut H) { | ||
self.name().hash(state); | ||
} | ||
} | ||
|
||
impl Borrow<str> for DeltaCookie { | ||
fn borrow(&self) -> &str { | ||
self.name() | ||
} | ||
} |
Oops, something went wrong.