8f1ab3485e
* Add a way to display flash messages * Make the flash messages look nice * Add actual feedback messages * cargo fmt * Move flash messages to PlumeRocket And add trait to convert PlumeRocket to BaseContext * Remove useless lifetime
84 lines
2.7 KiB
Rust
84 lines
2.7 KiB
Rust
pub use self::module::PlumeRocket;
|
|
|
|
#[cfg(not(test))]
|
|
mod module {
|
|
use crate::db_conn::DbConn;
|
|
use crate::search;
|
|
use crate::users;
|
|
use rocket::{
|
|
request::{self, FlashMessage, FromRequest, Request},
|
|
Outcome, State,
|
|
};
|
|
use scheduled_thread_pool::ScheduledThreadPool;
|
|
use std::sync::Arc;
|
|
|
|
/// Common context needed by most routes and operations on models
|
|
pub struct PlumeRocket {
|
|
pub conn: DbConn,
|
|
pub intl: rocket_i18n::I18n,
|
|
pub user: Option<users::User>,
|
|
pub searcher: Arc<search::Searcher>,
|
|
pub worker: Arc<ScheduledThreadPool>,
|
|
pub flash_msg: Option<(String, String)>,
|
|
}
|
|
|
|
impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket {
|
|
type Error = ();
|
|
|
|
fn from_request(request: &'a Request<'r>) -> request::Outcome<PlumeRocket, ()> {
|
|
let conn = request.guard::<DbConn>()?;
|
|
let intl = request.guard::<rocket_i18n::I18n>()?;
|
|
let user = request.guard::<users::User>().succeeded();
|
|
let worker = request.guard::<State<Arc<ScheduledThreadPool>>>()?;
|
|
let searcher = request.guard::<State<Arc<search::Searcher>>>()?;
|
|
let flash_msg = request.guard::<FlashMessage>().succeeded();
|
|
Outcome::Success(PlumeRocket {
|
|
conn,
|
|
intl,
|
|
user,
|
|
flash_msg: flash_msg.map(|f| (f.name().into(), f.msg().into())),
|
|
worker: worker.clone(),
|
|
searcher: searcher.clone(),
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod module {
|
|
use crate::db_conn::DbConn;
|
|
use crate::search;
|
|
use crate::users;
|
|
use rocket::{
|
|
request::{self, FromRequest, Request},
|
|
Outcome, State,
|
|
};
|
|
use scheduled_thread_pool::ScheduledThreadPool;
|
|
use std::sync::Arc;
|
|
|
|
/// Common context needed by most routes and operations on models
|
|
pub struct PlumeRocket {
|
|
pub conn: DbConn,
|
|
pub user: Option<users::User>,
|
|
pub searcher: Arc<search::Searcher>,
|
|
pub worker: Arc<ScheduledThreadPool>,
|
|
}
|
|
|
|
impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket {
|
|
type Error = ();
|
|
|
|
fn from_request(request: &'a Request<'r>) -> request::Outcome<PlumeRocket, ()> {
|
|
let conn = request.guard::<DbConn>()?;
|
|
let user = request.guard::<users::User>().succeeded();
|
|
let worker = request.guard::<State<Arc<ScheduledThreadPool>>>()?;
|
|
let searcher = request.guard::<State<Arc<search::Searcher>>>()?;
|
|
Outcome::Success(PlumeRocket {
|
|
conn,
|
|
user,
|
|
worker: worker.clone(),
|
|
searcher: searcher.clone(),
|
|
})
|
|
}
|
|
}
|
|
}
|