peach-workspace/peach-web/src/utils/flash.rs

51 lines
1.7 KiB
Rust

use rouille::{input, Request, Response};
/// Flash message trait for `Request`.
pub trait FlashRequest {
/// Retrieve the flash message cookie values from a `Request`.
fn retrieve_flash(&self) -> (Option<&str>, Option<&str>);
}
impl FlashRequest for Request {
fn retrieve_flash(&self) -> (Option<&str>, Option<&str>) {
// check for flash cookies
let flash_name = input::cookies(self)
.find(|&(n, _)| n == "flash_name")
// return the value of the cookie (key is already known)
.map(|key_val| key_val.1);
let flash_msg = input::cookies(self)
.find(|&(n, _)| n == "flash_msg")
.map(|key_val| key_val.1);
(flash_name, flash_msg)
}
}
/// Flash message trait for `Response`.
pub trait FlashResponse {
/// Add flash message cookies to a `Response`.
fn add_flash(self, flash_name: String, flash_msg: String) -> Response;
/// Reset flash message cookie values for a `Response`.
fn reset_flash(self) -> Response;
}
impl FlashResponse for Response {
fn add_flash(self, flash_name: String, flash_msg: String) -> Response {
// set the flash cookie headers
self.with_additional_header("Set-Cookie", format!("{}; Max-Age=1", flash_name))
.with_additional_header("Set-Cookie", format!("{}; Max-Age=1", flash_msg))
}
fn reset_flash(self) -> Response {
// set blank cookies to clear the flash msg from the previous request
self.with_additional_header(
"Set-Cookie",
"flash_name=; Max-Age=0; Expires=Fri, 21 Aug 1987 12:00:00 UTC",
)
.with_additional_header(
"Set-Cookie",
"flash_msg=; Max-Age=0; Expires=Fri, 21 Aug 1987 12:00:00 UTC",
)
}
}