Flash

Middleware that provides Flash Message functionality.

FlashStore provides operations for storing and retrieving data. CookieStore stores data in Cookies. SessionStore, on the other hand, stores data in the Session. SessionStore must be used in conjunction with the session feature.

Example Code

main.rs
Cargo.toml
flash-cookie-store/src/main.rs
use std::fmt::Write;

use salvo::flash::{CookieStore, FlashDepotExt};
use salvo::prelude::*;

#[handler]
pub async fn set_flash(depot: &mut Depot, res: &mut Response) {
let flash = depot.outgoing_flash_mut();
flash.info("Hey there!").debug("How is it going?");
res.render(Redirect::other("/get"));
}

#[handler]
pub async fn get_flash(depot: &mut Depot, _res: &mut Response) -> String {
let mut body = String::new();
if let Some(flash) = depot.incoming_flash() {
    for message in flash.iter() {
        writeln!(body, "{} - {}", message.value, message.level).unwrap();
    }
}
body
}

#[tokio::main]
async fn main() {
tracing_subscriber::fmt().init();

let router = Router::new()
    .hoop(CookieStore::new().into_handler())
    .push(Router::with_path("get").get(get_flash))
    .push(Router::with_path("set").get(set_flash));
let acceptor = TcpListener::new("0.0.0.0:5800").bind().await;
Server::new(acceptor).serve(router).await;
}

Session Store Example

main.rs
Cargo.toml
flash-session-store/src/main.rs
use std::fmt::Write;

use salvo::flash::{FlashDepotExt, SessionStore};
use salvo::prelude::*;

#[handler]
pub async fn set_flash(depot: &mut Depot, res: &mut Response) {
let flash = depot.outgoing_flash_mut();
flash.info("Hey there!").debug("How is it going?");
res.render(Redirect::other("/get"));
}

#[handler]
pub async fn get_flash(depot: &mut Depot, _res: &mut Response) -> String {
let mut body = String::new();
if let Some(flash) = depot.incoming_flash() {
    for message in flash.iter() {
        writeln!(body, "{} - {}", message.value, message.level).unwrap();
    }
}
body
}

#[tokio::main]
async fn main() {
tracing_subscriber::fmt().init();

let session_handler = salvo::session::SessionHandler::builder(
    salvo::session::MemoryStore::new(),
    b"secretabsecretabsecretabsecretabsecretabsecretabsecretabsecretab",
)
.build()
.unwrap();
let router = Router::new()
    .hoop(session_handler)
    .hoop(SessionStore::new().into_handler())
    .push(Router::with_path("get").get(get_flash))
    .push(Router::with_path("set").get(set_flash));
let acceptor = TcpListener::new("0.0.0.0:5800").bind().await;
Server::new(acceptor).serve(router).await;
}