cookie_rs/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//! # Cookie Library
//!
//! `cookie-rs` is a flexible library for working with HTTP cookies. It allows you to create, parse, and manage cookies.
//!
//! ## Features
//! - Create cookies with various attributes (e.g., `Domain`, `Path`, `Secure`, `HttpOnly`).
//! - Parse cookies from HTTP headers.
//! - Manage cookies using `CookieJar`, which tracks additions and removals.
//! - Support for `SameSite` attribute.
//! - Errors are handled gracefully through `ParseError`.
//!
//! ## Quick Start
//!
//! To use this library, add it to your dependencies:
//! ```diff
//! [dependencies]
//! ...
//! + cookie-rs = "0.1.0"
//! ```
//!
//! ### Create a Cookie
//!
//! ```rust
//! use cookie_rs::prelude::*;
//!
//! let cookie = Cookie::builder("session", "abc123")
//!     .domain("example.com")
//!     .path("/")
//!     .secure(true)
//!     .http_only(true)
//!     .same_site(SameSite::Lax)
//!     .build();
//!
//! println!("{}", cookie.to_string());
//! ```
//! Output:
//! ```text
//! session=abc123; Domain=example.com; Path=/; Secure; HttpOnly; SameSite=Lax
//! ```
//!
//! ### Parse a Cookie
//!
//! ```rust
//! use cookie_rs::Cookie;
//!
//! let cookie_str = "session=abc123; Secure; HttpOnly";
//! let cookie = Cookie::parse(cookie_str).expect("Failed to parse cookie");
//!
//! assert_eq!(cookie.name(), "session");
//! assert_eq!(cookie.value(), "abc123");
//! assert_eq!(cookie.secure(), Some(true));
//! assert_eq!(cookie.http_only(), Some(true));
//! ```
//!
//! ### Manage Cookies with `CookieJar`
//!
//! ```rust
//! use cookie_rs::{Cookie, CookieJar};
//!
//! let mut jar = CookieJar::default();
//!
//! // Add a cookie
//! let cookie = Cookie::new("user", "john");
//! jar.add(cookie);
//!
//! // Retrieve a cookie
//! if let Some(cookie) = jar.get("user") {
//!     println!("Found cookie: {}={}.", cookie.name(), cookie.value());
//! }
//!
//! // Remove a cookie
//! jar.remove("user");
//! assert!(jar.get("user").is_none());
//! ```
//!
//! ### Parse Multiple Cookies from a Header
//!
//! ```rust
//! use cookie_rs::CookieJar;
//!
//! let cookie_header = "name1=value1; name2=value2";
//! let jar = CookieJar::parse(cookie_header).expect("Failed to parse cookies");
//!
//! assert!(jar.get("name1").is_some());
//! assert!(jar.get("name2").is_some());
//! ```
//!
//! ### Convert Cookies to HTTP Header Values
//!
//! ```rust
//! use cookie_rs::{Cookie, CookieJar};
//!
//! let mut jar = CookieJar::default();
//!
//! jar.add(Cookie::new("name1", "value1"));
//! jar.add(Cookie::new("name2", "value2"));
//!
//! let headers = jar.as_header_values();
//! for header in headers {
//!     println!("Set-Cookie: {}", header);
//! }
//! ```
//! Output:
//! ```text
//! Set-Cookie: name1=value1
//! Set-Cookie: name2=value2
//! ```
//!
pub use crate::cookie::Cookie;
pub use crate::cookie::CookieBuilder;
pub use crate::jar::CookieJar;

pub(crate) use prison::StringPrison;

mod prison;

pub mod cookie;
pub mod jar;

pub mod error {
    pub use crate::cookie::parse::error::*;
}

pub mod prelude {
    pub use crate::cookie::Cookie;
    pub use crate::cookie::CookieBuilder;
    pub use crate::cookie::SameSite;
    pub use crate::jar::CookieJar;
}