Crates.io | cookiebox |
lib.rs | cookiebox |
version | 0.2.2 |
source | src |
created_at | 2024-11-15 04:59:18.16543 |
updated_at | 2024-11-27 15:34:54.76457 |
description | A type safe cookie management crate |
homepage | |
repository | https://github.com/MSalah73/cookiebox |
max_upload_size | |
id | 1448661 |
size | 107,811 |
A type safe cookie management crate for the Actix Web framework.
Cookiebox provides a type safe and flexible approach to managing cookies in Actix web based applications. It allows you to define, configure, and manage cookies with minimal boilerplate.
To start using the cookiebox in your web application, you must register [CookieMiddleware] in your App.
use actix_web::{web, App, HttpServer, HttpResponse, Error};
use cookiebox::{Processor, ProcessorConfig, CookieMiddleware};
#[actix_web::main]
async fn main() -> std::io::Result<()> {
// Start by creating a `Processor` from the `ProcessorConfig`
// This decides which cookie needs to decrypted or verified.
let processor: Processor = ProcessorConfig::default().into();
HttpServer::new(move ||
App::new()
// Add cookie middleware
.wrap(CookieMiddleware::new(processor.clone()))
.default_service(web::to(|| HttpResponse::Ok())))
.bind(("127.0.0.1", 8080))?
.run()
.await
}
Define your desired cookie types with customizable configurations.
use actix_web::HttpMessage;
use cookiebox::cookiebox_macros::{cookie, FromRequest};
use cookiebox::cookies::{Cookie, CookieName, IncomingConfig, OutgoingConfig};
use cookiebox::{Attributes, SameSite};
use serde_json::json;
// Define a cookie type
#[cookie(name = "__my-cookie")]
pub struct MyCookie;
// IncomingConfig gives the cookie type get and get_all cookies with similar name
// You may opt out if don't want read cookie data
impl IncomingConfig for MyCookie {
// Configure the get return to any custom type
type Get = String;
}
// OutgoingConfig gives the cookie type insert and remove cookies
// You may opt out if don't want insert or remove a cookie
impl OutgoingConfig for MyCookie {
// Configure the insert to any custom type
type Insert = (String, i32);
// In most cases, the default serialization should be sufficient. However, if needed,
// you can customize the way the cookie value is serialized by implementing this method.
fn serialize(values: Self::Insert) -> serde_json::Value {
json!(
format!("String: {} - i32: {}", values.0, values.1)
)
}
// Set the appropriate attribute for the cookie, check `Attributes` for more details
fn attributes<'c>() -> Attributes<'c> {
Attributes::new().same_site(SameSite::Lax).http_only(false)
}
}
// Once defined, you need to add these cookies in a collection struct and use derive macro to implement FromRequest
// Note: The macro only allows struct with either a single unnamed field or multiple named fields
#[derive(FromRequest)]
pub struct CookieCollection<'c>(Cookie<'c, MyCookie>);
Now, your cookies can be accessed in request handlers by using CookieCollection
as a parameter.
If you would like to see an example, click here.
Versions 0.1.0
and 0.2.0
of this crate are deprecated due to missing key features.
Please use version 0.2.1
or later for a fully functional implementation.
Upgrade by updating your Cargo.toml
:
[dependencies]
cookiebox = "0.2.1"