pub struct Cookie<'c> {
pub(crate) cookie_string: Option<Cow<'c, str>>,
pub(crate) name: CookieStr<'c>,
pub(crate) value: CookieStr<'c>,
pub(crate) expires: Option<Expiration>,
pub(crate) max_age: Option<Duration>,
pub(crate) domain: Option<CookieStr<'c>>,
pub(crate) path: Option<CookieStr<'c>>,
pub(crate) secure: Option<bool>,
pub(crate) http_only: Option<bool>,
pub(crate) same_site: Option<SameSite>,
pub(crate) partitioned: Option<bool>,
}
Expand description
Representation of an HTTP cookie.
§Constructing a Cookie
To construct a cookie with only a name/value, use Cookie::new()
:
use cookie::Cookie;
let cookie = Cookie::new("name", "value");
assert_eq!(cookie.to_string(), "name=value");
§Building a Cookie
To construct more elaborate cookies, use Cookie::build()
and
CookieBuilder
methods. Cookie::build()
accepts any type that
implements T: Into<Cookie>
. See Cookie::build()
for details.
use cookie::Cookie;
let cookie = Cookie::build(("name", "value"))
.domain("www.rust-lang.org")
.path("/")
.secure(true)
.http_only(true);
jar.add(cookie);
jar.remove(Cookie::build("name").path("/"));
Fields§
Storage for the cookie string. Only used if this structure was derived from a string that was subsequently parsed.
name: CookieStr<'c>
The cookie’s name.
value: CookieStr<'c>
The cookie’s value.
expires: Option<Expiration>
The cookie’s expiration, if any.
max_age: Option<Duration>
The cookie’s maximum age, if any.
domain: Option<CookieStr<'c>>
The cookie’s domain, if any.
path: Option<CookieStr<'c>>
The cookie’s path domain, if any.
secure: Option<bool>
Whether this cookie was marked Secure.
http_only: Option<bool>
Whether this cookie was marked HttpOnly.
same_site: Option<SameSite>
The draft SameSite
attribute.
partitioned: Option<bool>
The draft Partitioned
attribute.
Implementations§
source§impl<'c> Cookie<'c>
impl<'c> Cookie<'c>
sourcepub fn new<N, V>(name: N, value: V) -> Self
pub fn new<N, V>(name: N, value: V) -> Self
Creates a new Cookie
with the given name and value.
§Example
use cookie::Cookie;
let cookie = Cookie::new("name", "value");
assert_eq!(cookie.name_value(), ("name", "value"));
// This is equivalent to `from` with a `(name, value)` tuple:
let cookie = Cookie::from(("name", "value"));
assert_eq!(cookie.name_value(), ("name", "value"));
sourcepub fn named<N>(name: N) -> Cookie<'c>
👎Deprecated since 0.18.0: use Cookie::build(name)
or Cookie::from(name)
pub fn named<N>(name: N) -> Cookie<'c>
Cookie::build(name)
or Cookie::from(name)
Creates a new Cookie
with the given name and an empty value.
§Example
use cookie::Cookie;
let cookie = Cookie::named("name");
assert_eq!(cookie.name(), "name");
assert!(cookie.value().is_empty());
// This is equivalent to `from` with `"name`:
let cookie = Cookie::from("name");
assert_eq!(cookie.name(), "name");
assert!(cookie.value().is_empty());
sourcepub fn build<C: Into<Cookie<'c>>>(base: C) -> CookieBuilder<'c>
pub fn build<C: Into<Cookie<'c>>>(base: C) -> CookieBuilder<'c>
Creates a new CookieBuilder
starting from a base
cookie.
Any type that implements T: Into<Cookie>
can be used as a base
:
Into<Cookie> Type | Example | Equivalent To |
---|---|---|
(K, V) , K, V: Into<Cow<str>> | ("name", "value") | Cookie::new(name, value) |
&str , String , Cow<str> | "name" | Cookie::new(name, "") |
CookieBuilder | Cookie::build("foo") | CookieBuilder::build() |
§Example
use cookie::Cookie;
// Use `(K, V)` as the base, setting a name and value.
let b1 = Cookie::build(("name", "value")).path("/");
assert_eq!(b1.inner().name_value(), ("name", "value"));
assert_eq!(b1.inner().path(), Some("/"));
// Use `&str` as the base, setting a name and empty value.
let b2 = Cookie::build(("name"));
assert_eq!(b2.inner().name_value(), ("name", ""));
// Use `CookieBuilder` as the base, inheriting all properties.
let b3 = Cookie::build(b1);
assert_eq!(b3.inner().name_value(), ("name", "value"));
assert_eq!(b3.inner().path(), Some("/"));
sourcepub fn parse<S>(s: S) -> Result<Cookie<'c>, ParseError>
pub fn parse<S>(s: S) -> Result<Cookie<'c>, ParseError>
Parses a Cookie
from the given HTTP cookie header value string. Does
not perform any percent-decoding.
§Example
use cookie::Cookie;
let c = Cookie::parse("foo=bar%20baz; HttpOnly").unwrap();
assert_eq!(c.name_value(), ("foo", "bar%20baz"));
assert_eq!(c.http_only(), Some(true));
assert_eq!(c.secure(), None);
sourcepub fn split_parse<S>(string: S) -> SplitCookies<'c> ⓘ
pub fn split_parse<S>(string: S) -> SplitCookies<'c> ⓘ
Parses the HTTP Cookie
header, a series of cookie names and value
separated by ;
, returning an iterator over the parse results. Each
item returned by the iterator is a Result<Cookie, ParseError>
of
parsing one name/value pair. Empty cookie values (i.e, in a=1;;b=2
)
and any excess surrounding whitespace are ignored.
Unlike [Cookie::split_parse_encoded()
], this method does not
percent-decode keys and values.
§Example
use cookie::Cookie;
let string = "name=value; other=key%20value";
for cookie in Cookie::split_parse(string) {
let cookie = cookie.unwrap();
match cookie.name() {
"name" => assert_eq!(cookie.value(), "value"),
"other" => assert_eq!(cookie.value(), "key%20value"),
_ => unreachable!()
}
}
sourcepub fn into_owned(self) -> Cookie<'static>
pub fn into_owned(self) -> Cookie<'static>
Converts self
into a Cookie
with a static lifetime with as few
allocations as possible.
§Example
use cookie::Cookie;
let c = Cookie::new("a", "b");
let owned_cookie = c.into_owned();
assert_eq!(owned_cookie.name_value(), ("a", "b"));
sourcepub fn name(&self) -> &str
pub fn name(&self) -> &str
Returns the name of self
.
§Example
use cookie::Cookie;
let c = Cookie::new("name", "value");
assert_eq!(c.name(), "name");
sourcepub fn value(&self) -> &str
pub fn value(&self) -> &str
Returns the value of self
.
Does not strip surrounding quotes. See Cookie::value_trimmed()
for a
version that does.
§Example
use cookie::Cookie;
let c = Cookie::new("name", "value");
assert_eq!(c.value(), "value");
let c = Cookie::new("name", "\"value\"");
assert_eq!(c.value(), "\"value\"");
sourcepub fn value_trimmed(&self) -> &str
pub fn value_trimmed(&self) -> &str
Returns the value of self
with surrounding double-quotes trimmed.
This is not the value of the cookie (that is Cookie::value()
).
Instead, this is the value with a surrounding pair of double-quotes, if
any, trimmed away. Quotes are only trimmed when they form a pair and
never otherwise. The trimmed value is never used for other operations,
such as equality checking, on self
.
§Example
use cookie::Cookie;
let c0 = Cookie::new("name", "value");
assert_eq!(c0.value_trimmed(), "value");
let c = Cookie::new("name", "\"value\"");
assert_eq!(c.value_trimmed(), "value");
assert!(c != c0);
let c = Cookie::new("name", "\"value");
assert_eq!(c.value(), "\"value");
assert_eq!(c.value_trimmed(), "\"value");
assert!(c != c0);
let c = Cookie::new("name", "\"value\"\"");
assert_eq!(c.value(), "\"value\"\"");
assert_eq!(c.value_trimmed(), "value\"");
assert!(c != c0);
sourcepub fn name_value(&self) -> (&str, &str)
pub fn name_value(&self) -> (&str, &str)
Returns the name and value of self
as a tuple of (name, value)
.
§Example
use cookie::Cookie;
let c = Cookie::new("name", "value");
assert_eq!(c.name_value(), ("name", "value"));
sourcepub fn name_value_trimmed(&self) -> (&str, &str)
pub fn name_value_trimmed(&self) -> (&str, &str)
Returns the name and trimmed value of self
as a tuple of (name, trimmed_value)
.
§Example
use cookie::Cookie;
let c = Cookie::new("name", "\"value\"");
assert_eq!(c.name_value_trimmed(), ("name", "value"));
sourcepub fn http_only(&self) -> Option<bool>
pub fn http_only(&self) -> Option<bool>
Returns whether this cookie was marked HttpOnly
or not. Returns
Some(true)
when the cookie was explicitly set (manually or parsed) as
HttpOnly
, Some(false)
when http_only
was manually set to false
,
and None
otherwise.
§Example
use cookie::Cookie;
let c = Cookie::parse("name=value; httponly").unwrap();
assert_eq!(c.http_only(), Some(true));
let mut c = Cookie::new("name", "value");
assert_eq!(c.http_only(), None);
let mut c = Cookie::new("name", "value");
assert_eq!(c.http_only(), None);
// An explicitly set "false" value.
c.set_http_only(false);
assert_eq!(c.http_only(), Some(false));
// An explicitly set "true" value.
c.set_http_only(true);
assert_eq!(c.http_only(), Some(true));
sourcepub fn secure(&self) -> Option<bool>
pub fn secure(&self) -> Option<bool>
Returns whether this cookie was marked Secure
or not. Returns
Some(true)
when the cookie was explicitly set (manually or parsed) as
Secure
, Some(false)
when secure
was manually set to false
, and
None
otherwise.
§Example
use cookie::Cookie;
let c = Cookie::parse("name=value; Secure").unwrap();
assert_eq!(c.secure(), Some(true));
let mut c = Cookie::parse("name=value").unwrap();
assert_eq!(c.secure(), None);
let mut c = Cookie::new("name", "value");
assert_eq!(c.secure(), None);
// An explicitly set "false" value.
c.set_secure(false);
assert_eq!(c.secure(), Some(false));
// An explicitly set "true" value.
c.set_secure(true);
assert_eq!(c.secure(), Some(true));
sourcepub fn same_site(&self) -> Option<SameSite>
pub fn same_site(&self) -> Option<SameSite>
Returns the SameSite
attribute of this cookie if one was specified.
§Example
use cookie::{Cookie, SameSite};
let c = Cookie::parse("name=value; SameSite=Lax").unwrap();
assert_eq!(c.same_site(), Some(SameSite::Lax));
sourcepub fn partitioned(&self) -> Option<bool>
pub fn partitioned(&self) -> Option<bool>
Returns whether this cookie was marked Partitioned
or not. Returns
Some(true)
when the cookie was explicitly set (manually or parsed) as
Partitioned
, Some(false)
when partitioned
was manually set to false
,
and None
otherwise.
Note: This cookie attribute is an HTTP draft! Its meaning and definition are not standardized and therefore subject to change.
§Example
use cookie::Cookie;
let c = Cookie::parse("name=value; Partitioned").unwrap();
assert_eq!(c.partitioned(), Some(true));
let mut c = Cookie::parse("name=value").unwrap();
assert_eq!(c.partitioned(), None);
let mut c = Cookie::new("name", "value");
assert_eq!(c.partitioned(), None);
// An explicitly set "false" value.
c.set_partitioned(false);
assert_eq!(c.partitioned(), Some(false));
// An explicitly set "true" value.
c.set_partitioned(true);
assert_eq!(c.partitioned(), Some(true));
sourcepub fn max_age(&self) -> Option<Duration>
pub fn max_age(&self) -> Option<Duration>
Returns the specified max-age of the cookie if one was specified.
§Example
use cookie::Cookie;
let c = Cookie::parse("name=value").unwrap();
assert_eq!(c.max_age(), None);
let c = Cookie::parse("name=value; Max-Age=3600").unwrap();
assert_eq!(c.max_age().map(|age| age.whole_hours()), Some(1));
sourcepub fn path(&self) -> Option<&str>
pub fn path(&self) -> Option<&str>
Returns the Path
of the cookie if one was specified.
§Example
use cookie::Cookie;
let c = Cookie::parse("name=value").unwrap();
assert_eq!(c.path(), None);
let c = Cookie::parse("name=value; Path=/").unwrap();
assert_eq!(c.path(), Some("/"));
let c = Cookie::parse("name=value; path=/sub").unwrap();
assert_eq!(c.path(), Some("/sub"));
sourcepub fn domain(&self) -> Option<&str>
pub fn domain(&self) -> Option<&str>
Returns the Domain
of the cookie if one was specified.
This does not consider whether the Domain
is valid; validation is left
to higher-level libraries, as needed. However, if the Domain
starts
with a leading .
, the leading .
is stripped.
§Example
use cookie::Cookie;
let c = Cookie::parse("name=value").unwrap();
assert_eq!(c.domain(), None);
let c = Cookie::parse("name=value; Domain=crates.io").unwrap();
assert_eq!(c.domain(), Some("crates.io"));
let c = Cookie::parse("name=value; Domain=.crates.io").unwrap();
assert_eq!(c.domain(), Some("crates.io"));
// Note that `..crates.io` is not a valid domain.
let c = Cookie::parse("name=value; Domain=..crates.io").unwrap();
assert_eq!(c.domain(), Some(".crates.io"));
sourcepub fn expires(&self) -> Option<Expiration>
pub fn expires(&self) -> Option<Expiration>
Returns the Expiration
of the cookie if one was specified.
§Example
use cookie::{Cookie, Expiration};
let c = Cookie::parse("name=value").unwrap();
assert_eq!(c.expires(), None);
// Here, `cookie.expires_datetime()` returns `None`.
let c = Cookie::build(("name", "value")).expires(None).build();
assert_eq!(c.expires(), Some(Expiration::Session));
let expire_time = "Wed, 21 Oct 2017 07:28:00 GMT";
let cookie_str = format!("name=value; Expires={}", expire_time);
let c = Cookie::parse(cookie_str).unwrap();
assert_eq!(c.expires().and_then(|e| e.datetime()).map(|t| t.year()), Some(2017));
sourcepub fn expires_datetime(&self) -> Option<OffsetDateTime>
pub fn expires_datetime(&self) -> Option<OffsetDateTime>
Returns the expiration date-time of the cookie if one was specified.
§Example
use cookie::Cookie;
let c = Cookie::parse("name=value").unwrap();
assert_eq!(c.expires_datetime(), None);
// Here, `cookie.expires()` returns `Some`.
let c = Cookie::build(("name", "value")).expires(None).build();
assert_eq!(c.expires_datetime(), None);
let expire_time = "Wed, 21 Oct 2017 07:28:00 GMT";
let cookie_str = format!("name=value; Expires={}", expire_time);
let c = Cookie::parse(cookie_str).unwrap();
assert_eq!(c.expires_datetime().map(|t| t.year()), Some(2017));
sourcepub fn set_name<N: Into<Cow<'c, str>>>(&mut self, name: N)
pub fn set_name<N: Into<Cow<'c, str>>>(&mut self, name: N)
Sets the name of self
to name
.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.name(), "name");
c.set_name("foo");
assert_eq!(c.name(), "foo");
sourcepub fn set_value<V: Into<Cow<'c, str>>>(&mut self, value: V)
pub fn set_value<V: Into<Cow<'c, str>>>(&mut self, value: V)
Sets the value of self
to value
.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.value(), "value");
c.set_value("bar");
assert_eq!(c.value(), "bar");
sourcepub fn set_http_only<T: Into<Option<bool>>>(&mut self, value: T)
pub fn set_http_only<T: Into<Option<bool>>>(&mut self, value: T)
Sets the value of http_only
in self
to value
. If value
is
None
, the field is unset.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.http_only(), None);
c.set_http_only(true);
assert_eq!(c.http_only(), Some(true));
c.set_http_only(false);
assert_eq!(c.http_only(), Some(false));
c.set_http_only(None);
assert_eq!(c.http_only(), None);
sourcepub fn set_secure<T: Into<Option<bool>>>(&mut self, value: T)
pub fn set_secure<T: Into<Option<bool>>>(&mut self, value: T)
Sets the value of secure
in self
to value
. If value
is None
,
the field is unset.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.secure(), None);
c.set_secure(true);
assert_eq!(c.secure(), Some(true));
c.set_secure(false);
assert_eq!(c.secure(), Some(false));
c.set_secure(None);
assert_eq!(c.secure(), None);
sourcepub fn set_same_site<T: Into<Option<SameSite>>>(&mut self, value: T)
pub fn set_same_site<T: Into<Option<SameSite>>>(&mut self, value: T)
Sets the value of same_site
in self
to value
. If value
is
None
, the field is unset. If value
is SameSite::None
, the “Secure”
flag will be set when the cookie is written out unless secure
is
explicitly set to false
via Cookie::set_secure()
or the equivalent
builder method.
§Example
use cookie::{Cookie, SameSite};
let mut c = Cookie::new("name", "value");
assert_eq!(c.same_site(), None);
c.set_same_site(SameSite::None);
assert_eq!(c.same_site(), Some(SameSite::None));
assert_eq!(c.to_string(), "name=value; SameSite=None; Secure");
c.set_secure(false);
assert_eq!(c.to_string(), "name=value; SameSite=None");
let mut c = Cookie::new("name", "value");
assert_eq!(c.same_site(), None);
c.set_same_site(SameSite::Strict);
assert_eq!(c.same_site(), Some(SameSite::Strict));
assert_eq!(c.to_string(), "name=value; SameSite=Strict");
c.set_same_site(None);
assert_eq!(c.same_site(), None);
assert_eq!(c.to_string(), "name=value");
sourcepub fn set_partitioned<T: Into<Option<bool>>>(&mut self, value: T)
pub fn set_partitioned<T: Into<Option<bool>>>(&mut self, value: T)
Sets the value of partitioned
in self
to value
. If value
is
None
, the field is unset.
Note: Partitioned cookies require the Secure
attribute to be
set. As such, Partitioned
cookies are always rendered with the
Secure
attribute, irrespective of the Secure
attribute’s setting.
Note: This cookie attribute is an HTTP draft! Its meaning and definition are not standardized and therefore subject to change.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.partitioned(), None);
c.set_partitioned(true);
assert_eq!(c.partitioned(), Some(true));
assert!(c.to_string().contains("Secure"));
c.set_partitioned(false);
assert_eq!(c.partitioned(), Some(false));
assert!(!c.to_string().contains("Secure"));
c.set_partitioned(None);
assert_eq!(c.partitioned(), None);
assert!(!c.to_string().contains("Secure"));
sourcepub fn set_max_age<D: Into<Option<Duration>>>(&mut self, value: D)
pub fn set_max_age<D: Into<Option<Duration>>>(&mut self, value: D)
Sets the value of max_age
in self
to value
. If value
is None
,
the field is unset.
§Example
use cookie::Cookie;
use cookie::time::Duration;
let mut c = Cookie::new("name", "value");
assert_eq!(c.max_age(), None);
c.set_max_age(Duration::hours(10));
assert_eq!(c.max_age(), Some(Duration::hours(10)));
c.set_max_age(None);
assert!(c.max_age().is_none());
sourcepub fn set_path<P: Into<Cow<'c, str>>>(&mut self, path: P)
pub fn set_path<P: Into<Cow<'c, str>>>(&mut self, path: P)
Sets the path
of self
to path
.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.path(), None);
c.set_path("/");
assert_eq!(c.path(), Some("/"));
sourcepub fn unset_path(&mut self)
pub fn unset_path(&mut self)
Unsets the path
of self
.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.path(), None);
c.set_path("/");
assert_eq!(c.path(), Some("/"));
c.unset_path();
assert_eq!(c.path(), None);
sourcepub fn set_domain<D: Into<Cow<'c, str>>>(&mut self, domain: D)
pub fn set_domain<D: Into<Cow<'c, str>>>(&mut self, domain: D)
Sets the domain
of self
to domain
.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.domain(), None);
c.set_domain("rust-lang.org");
assert_eq!(c.domain(), Some("rust-lang.org"));
sourcepub fn unset_domain(&mut self)
pub fn unset_domain(&mut self)
Unsets the domain
of self
.
§Example
use cookie::Cookie;
let mut c = Cookie::new("name", "value");
assert_eq!(c.domain(), None);
c.set_domain("rust-lang.org");
assert_eq!(c.domain(), Some("rust-lang.org"));
c.unset_domain();
assert_eq!(c.domain(), None);
sourcepub fn set_expires<T: Into<Expiration>>(&mut self, time: T)
pub fn set_expires<T: Into<Expiration>>(&mut self, time: T)
Sets the expires field of self
to time
. If time
is None
, an
expiration of Session
is set.
§Example
use cookie::{Cookie, Expiration};
use cookie::time::{Duration, OffsetDateTime};
let mut c = Cookie::new("name", "value");
assert_eq!(c.expires(), None);
let mut now = OffsetDateTime::now_utc();
now += Duration::weeks(52);
c.set_expires(now);
assert!(c.expires().is_some());
c.set_expires(None);
assert_eq!(c.expires(), Some(Expiration::Session));
sourcepub fn unset_expires(&mut self)
pub fn unset_expires(&mut self)
Unsets the expires
of self
.
§Example
use cookie::{Cookie, Expiration};
let mut c = Cookie::new("name", "value");
assert_eq!(c.expires(), None);
c.set_expires(None);
assert_eq!(c.expires(), Some(Expiration::Session));
c.unset_expires();
assert_eq!(c.expires(), None);
sourcepub fn make_permanent(&mut self)
pub fn make_permanent(&mut self)
Makes self
a “permanent” cookie by extending its expiration and max
age 20 years into the future.
§Example
use cookie::Cookie;
use cookie::time::Duration;
let mut c = Cookie::new("foo", "bar");
assert!(c.expires().is_none());
assert!(c.max_age().is_none());
c.make_permanent();
assert!(c.expires().is_some());
assert_eq!(c.max_age(), Some(Duration::days(365 * 20)));
sourcepub fn make_removal(&mut self)
pub fn make_removal(&mut self)
Make self
a “removal” cookie by clearing its value, setting a max-age
of 0
, and setting an expiration date far in the past.
§Example
use cookie::Cookie;
use cookie::time::Duration;
let mut c = Cookie::new("foo", "bar");
c.make_permanent();
assert_eq!(c.max_age(), Some(Duration::days(365 * 20)));
assert_eq!(c.value(), "bar");
c.make_removal();
assert_eq!(c.value(), "");
assert_eq!(c.max_age(), Some(Duration::ZERO));
pub(crate) fn fmt_parameters(&self, f: &mut Formatter<'_>) -> Result
sourcepub fn name_raw(&self) -> Option<&'c str>
pub fn name_raw(&self) -> Option<&'c str>
Returns the name of self
as a string slice of the raw string self
was originally parsed from. If self
was not originally parsed from a
raw string, returns None
.
This method differs from Cookie::name()
in that it returns a string
with the same lifetime as the originally parsed string. This lifetime
may outlive self
. If a longer lifetime is not required, or you’re
unsure if you need a longer lifetime, use Cookie::name()
.
§Example
use cookie::Cookie;
let cookie_string = format!("{}={}", "foo", "bar");
// `c` will be dropped at the end of the scope, but `name` will live on
let name = {
let c = Cookie::parse(cookie_string.as_str()).unwrap();
c.name_raw()
};
assert_eq!(name, Some("foo"));
sourcepub fn value_raw(&self) -> Option<&'c str>
pub fn value_raw(&self) -> Option<&'c str>
Returns the value of self
as a string slice of the raw string self
was originally parsed from. If self
was not originally parsed from a
raw string, returns None
.
This method differs from Cookie::value()
in that it returns a
string with the same lifetime as the originally parsed string. This
lifetime may outlive self
. If a longer lifetime is not required, or
you’re unsure if you need a longer lifetime, use Cookie::value()
.
§Example
use cookie::Cookie;
let cookie_string = format!("{}={}", "foo", "bar");
// `c` will be dropped at the end of the scope, but `value` will live on
let value = {
let c = Cookie::parse(cookie_string.as_str()).unwrap();
c.value_raw()
};
assert_eq!(value, Some("bar"));
sourcepub fn path_raw(&self) -> Option<&'c str>
pub fn path_raw(&self) -> Option<&'c str>
Returns the Path
of self
as a string slice of the raw string self
was originally parsed from. If self
was not originally parsed from a
raw string, or if self
doesn’t contain a Path
, or if the Path
has
changed since parsing, returns None
.
This method differs from Cookie::path()
in that it returns a
string with the same lifetime as the originally parsed string. This
lifetime may outlive self
. If a longer lifetime is not required, or
you’re unsure if you need a longer lifetime, use Cookie::path()
.
§Example
use cookie::Cookie;
let cookie_string = format!("{}={}; Path=/", "foo", "bar");
// `c` will be dropped at the end of the scope, but `path` will live on
let path = {
let c = Cookie::parse(cookie_string.as_str()).unwrap();
c.path_raw()
};
assert_eq!(path, Some("/"));
sourcepub fn domain_raw(&self) -> Option<&'c str>
pub fn domain_raw(&self) -> Option<&'c str>
Returns the Domain
of self
as a string slice of the raw string
self
was originally parsed from. If self
was not originally parsed
from a raw string, or if self
doesn’t contain a Domain
, or if the
Domain
has changed since parsing, returns None
.
Like Cookie::domain()
, this does not consider whether Domain
is
valid; validation is left to higher-level libraries, as needed. However,
if Domain
starts with a leading .
, the leading .
is stripped.
This method differs from Cookie::domain()
in that it returns a
string with the same lifetime as the originally parsed string. This
lifetime may outlive self
struct. If a longer lifetime is not
required, or you’re unsure if you need a longer lifetime, use
Cookie::domain()
.
§Example
use cookie::Cookie;
let cookie_string = format!("{}={}; Domain=.crates.io", "foo", "bar");
//`c` will be dropped at the end of the scope, but `domain` will live on
let domain = {
let c = Cookie::parse(cookie_string.as_str()).unwrap();
c.domain_raw()
};
assert_eq!(domain, Some("crates.io"));
sourcepub fn stripped<'a>(&'a self) -> Display<'a, 'c>
pub fn stripped<'a>(&'a self) -> Display<'a, 'c>
Wraps self
in a stripped Display
]: a cost-free wrapper around
Cookie
whose fmt::Display
implementation prints only the name
and value
of the wrapped Cookie
.
The returned structure can be chained with [Display::encoded()
] to
encode the name and value.
§Example
use cookie::Cookie;
let mut c = Cookie::build(("key?", "value")).secure(true).path("/").build();
assert_eq!(&c.stripped().to_string(), "key?=value");
Trait Implementations§
source§impl<'a> AsMut<Cookie<'a>> for CookieBuilder<'a>
impl<'a> AsMut<Cookie<'a>> for CookieBuilder<'a>
source§impl<'a> AsRef<Cookie<'a>> for CookieBuilder<'a>
impl<'a> AsRef<Cookie<'a>> for CookieBuilder<'a>
source§impl<'a> Borrow<Cookie<'a>> for CookieBuilder<'a>
impl<'a> Borrow<Cookie<'a>> for CookieBuilder<'a>
source§impl<'a> BorrowMut<Cookie<'a>> for CookieBuilder<'a>
impl<'a> BorrowMut<Cookie<'a>> for CookieBuilder<'a>
source§fn borrow_mut(&mut self) -> &mut Cookie<'a>
fn borrow_mut(&mut self) -> &mut Cookie<'a>
source§impl<'c> Display for Cookie<'c>
impl<'c> Display for Cookie<'c>
source§fn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Formats the cookie self
as a Set-Cookie
header value.
Does not percent-encode any values. To percent-encode, use
[Cookie::encoded()
].
§Example
use cookie::Cookie;
let mut cookie = Cookie::build(("foo", "bar")).path("/");
assert_eq!(cookie.to_string(), "foo=bar; Path=/");
source§impl<'c> From<Cookie<'c>> for CookieBuilder<'c>
impl<'c> From<Cookie<'c>> for CookieBuilder<'c>
source§impl<'a> From<CookieBuilder<'a>> for Cookie<'a>
impl<'a> From<CookieBuilder<'a>> for Cookie<'a>
source§fn from(builder: CookieBuilder<'a>) -> Self
fn from(builder: CookieBuilder<'a>) -> Self
source§impl<'a, 'b> PartialEq<Cookie<'b>> for CookieBuilder<'a>
impl<'a, 'b> PartialEq<Cookie<'b>> for CookieBuilder<'a>
source§impl<'a, 'b> PartialEq<CookieBuilder<'b>> for Cookie<'a>
impl<'a, 'b> PartialEq<CookieBuilder<'b>> for Cookie<'a>
Auto Trait Implementations§
impl<'c> Freeze for Cookie<'c>
impl<'c> RefUnwindSafe for Cookie<'c>
impl<'c> Send for Cookie<'c>
impl<'c> Sync for Cookie<'c>
impl<'c> Unpin for Cookie<'c>
impl<'c> UnwindSafe for Cookie<'c>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)