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;
}