51 lines
1.7 KiB
Rust
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",
|
|
)
|
|
}
|
|
}
|