# Version 0.18 ## Version 0.18.1 (Mar 25, 2024) ### New Features * Added support for the draft `Partitioned` attribute. The new `CookieBuilder::partition()`, `Cookie::partitioned()`, and `Cookie::set_partitioned()` methods allow enabling and/or disabling the attribute. Additionally, the attribute is recognized during parsing. * Added `CookieBuilder::removal()`, counterpart to `Cookie::make_removal()`. ## Version 0.18.0 (Oct 9, 2023) ### Breaking Changes * The MSRV is now 1.56. * `Cookie::value()` no longer trims surrounding double quotes. (89eddd) Use `Cookie::value_trimmed()` for the previous behavior. * Many methods now expect a `T: Into` in place of `Cookie`. (49ff7b) Functions and methods that previously accepted a `Cookie` now accept any `T: Into`. This particularly affects the `CookieJar` API, which now allows simpler addition and removal of cookies: * `jar.add(("foo", "bar"));` * `jar.add(Cookie::build(("foo", "bar")).path("/"));` * `jar.remove("foo");` * `jar.remove(Cookie::build("foo").path("/"));` * `CookieJar::force_remove()` now expects a `T: AsRef` in place of `&Cookie`. Force-removal never requires more information than a cookie's name. The API has been simplified to reflect this. * `CookieBuilder::finish()` was deprecated in favor of `CookieBuilder::build()`. This largely serves as a compile-time notice that calling `finish()` or `build()` is largely unnecessary given that `CookieBuilder` implements `Into`. * `Cookie::named()` was deprecated in favor of using `Cookie::build()` or `Cookie::from()`. * `Cookie::named("foo")` is equivalent to `Cookie::from("foo")`. * `Cookie::build("foo")` begins building a cookie equivalent to `Cookie::named("foo")`. ### New Features * Added `Cookie::value_trimmed()` and `Cookie::name_value_trimmed()`. These versions of `Cookie::value()` and `Cookie::name_value()`, respectively, trim a matching pair of surrounding double quotes from the cookie's value, if any are present. * String-like types, tuples of string-like types, and `CookieBuilder` implement `Into`. Implementations of `Into` for string-like types (`&str`, `String`, `Cow`), tuples of string-like types `(name: string, value: string)`, and `CookieBuilder` were added. The former implementations create a cookie with a name corresponding to the string and an empty value. The tuple implementation creates a cookie with the given name and value strings. The `CookieBuilder` implementation returns the built cookie. * `Key` implements `Debug`. To not leak sensitive information, the representation is simply `"Key"`. * `CookieBuilder` implements `Borrow{Mut}`, `As{Ref,Mut}`, `Display`. * Added `CookieBuilder::inner{_mut}()` to (mutably) borrow cookies being built. * Added `PrefixedJar` and `CookieJar::prefixed{_mut}()`, which implement the cookie prefixes HTTP draft. ## Version 0.18.0.rc.0 (Sep 27, 2023) See the entry above for 0.18.0. # Version 0.17 ## Version 0.17.0 (Jan 22, 2022) ### Breaking Changes * Cookie parsing no longer removes a `.` `Domain` prefix. `Cookie::domain()` now removes a `.` prefix before returning. As these changes are inverses, they are not likely observable. The change only affects manually set `domain` values via the `.domain()` builder method, the `set_domain()` setter method, or similar, which will now have a prefix of `.` removed when returned by `Cookie::domain()`. This results in more consistent treatment of `Domain` values. ### New Features * Added `Cookie::split_parse()` and `Cookie::split_parse_encoded()` methods. The methods split a `;`-joined cookie string and parse/decode the split values. They return a newly introduced iterator value of type `SplitCookies` over the parse results. ### General Changes and Fixes * Parsing fuzzers were introduced and run for 48 CPU hours without failure. * `base64` was updated to `0.21`. # Version 0.16 ## Version 0.16.2 (Dec 16, 2022) ### General Changes * `base64` was updated to `0.20`. ## Version 0.16.1 (Sep 25, 2022) ### Changes and Fixes * The `,`, `(`, and `)` are percent-encoded/decoded when encoding is used. * The `aes-gcm` dependency was updated to 0.10. ## Version 0.16.0 (Dec 28, 2021) ### Breaking Changes * The MSRV is now `1.53`, up from `1.41` in `0.15`. * `time` has been updated to `0.3` and is reexported from the crate root. ### General Changes * `rust-crypto` dependencies were updated to their latest versions. # Version 0.15 ## Version 0.15.1 (Jul 14, 2021) ### Changes and Fixes * A panic that could result from non-char boundary indexing was fixed. * Stale doc references to version `0.14` were updated. ## Version 0.15.0 (Feb 25, 2021) ### Breaking Changes * `Cookie::force_remove()` takes `&Cookie` instead of `Cookie`. * Child jar methods split into immutable and mutable versions (`Cookie::{private{_mut}, signed{_mut}}`). * `Cookie::encoded()` returns a new `Display` struct. * Dates with year `<= 99` are handled like Chrome: range `0..=68` maps to `2000..=2068`, `69..=99` to `1969..=1999`. * `Cookie::{set_}expires()` operates on a new `Expiration` enum. ### New Features * Added `Cookie::make_removal()` to manually create expired cookies. * Added `Cookie::stripped()` display variant to print only the `name` and `value` of a cookie. * `Key` implements a constant-time `PartialEq`. * Added `Key::master()` to retrieve the full 512-bit master key. * Added `PrivateJar::decrypt()` to manually decrypt an encrypted `Cookie`. * Added `SignedJar::verify()` to manually verify a signed `Cookie`. * `Cookie::expires()` returns an `Option` to allow distinguishing between unset and `None` expirations. * Added `Cookie::expires_datetime()` to retrieve the expiration as an `OffsetDateTime`. * Added `Cookie::unset_expires()` to unset expirations. ### General Changes and Fixes * MSRV is 1.41. # Version 0.14 ## Version 0.14.3 (Nov 5, 2020) ### Changes and Fixes * `rust-crypto` dependencies were updated to their latest versions. ## Version 0.14.2 (Jul 22, 2020) ### Changes and Fixes * Documentation now builds on the stable channel. * `rust-crypto` dependencies were updated to their latest versions. * Fixed 'interator' -> 'iterator' documentation typo. ## Version 0.14.1 (Jun 5, 2020) ### Changes and Fixes * Updated `base64` dependency to 0.12. * Updated minimum `time` dependency to correct version: 0.2.11. * Added `readme` key to `Cargo.toml`, updated `license` field. ## Version 0.14.0 (May 29, 2020) ### Breaking Changes * The `Key::from_master()` method was deprecated in favor of the more aptly named `Key::derive_from()`. * The deprecated `CookieJar::clear()` method was removed. ### New Features * Added `Key::from()` to create a `Key` structure from a full-length key. * Signed and private cookie jars can be individually enabled via the new `signed` and `private` features, respectively. * Key derivation via key expansion can be individually enabled via the new `key-expansion` feature. ### General Changes and Fixes * `ring` is no longer a dependency: `RustCrypto`-based cryptography is used in lieu of `ring`. Prior to their inclusion here, the `hmac` and `hkdf` crates were audited. * Quotes, if present, are stripped from cookie values when parsing. # Version 0.13 ## Version 0.13.3 (Feb 3, 2020) ### Changes * The `time` dependency was unpinned from `0.2.4`, allowing any `0.2.x` version of `time` where `x >= 6`. ## Version 0.13.2 (Jan 28, 2020) ### Changes * The `time` dependency was pinned to `0.2.4` due to upstream breaking changes in `0.2.5`. ## Version 0.13.1 (Jan 23, 2020) ### New Features * Added the `CookieJar::reset_delta()` method, which reverts all _delta_ changes to a `CookieJar`. ## Version 0.13.0 (Jan 21, 2020) ### Breaking Changes * `time` was updated from 0.1 to 0.2. * `ring` was updated from 0.14 to 0.16. * `SameSite::None` now writes `SameSite=None` to correspond with updated `SameSite` draft. `SameSite` can be unset by passing `None` to `Cookie::set_same_site()`. * `CookieBuilder` gained a lifetime: `CookieBuilder<'c>`. ### General Changes and Fixes * Added a CHANGELOG. * `expires`, `max_age`, `path`, and `domain` can be unset by passing `None` to the respective `Cookie::set_{field}()` method. * The "Expires" field is limited to a date-time of Dec 31, 9999, 23:59:59. * The `%` character is now properly encoded and decoded. * Constructor methods on `CookieBuilder` allow non-static lifetimes.