diff options
Diffstat (limited to 'server/src/helper/mod.rs')
-rw-r--r-- | server/src/helper/mod.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/server/src/helper/mod.rs b/server/src/helper/mod.rs index 4b0644c..9e8ce79 100644 --- a/server/src/helper/mod.rs +++ b/server/src/helper/mod.rs @@ -11,9 +11,18 @@ pub mod language; pub mod node_id; pub mod session; +use crate::ui::error::{MyError, MyResult}; use accept::Accept; use jellylogic::session::Session; use jellyui::locale::Language; +use language::lang_from_request; +use rocket::{ + async_trait, + http::Status, + request::{FromRequest, Outcome}, + Request, +}; +use session::session_from_request; #[derive(Debug, Clone, Copy, Default)] pub struct A<T>(pub T); @@ -23,3 +32,24 @@ pub struct RequestInfo { pub accept: Accept, pub session: Session, } + +impl RequestInfo { + pub async fn from_request_ut(request: &Request<'_>) -> MyResult<Self> { + Ok(Self { + lang: lang_from_request(request), + accept: Accept::from_request_ut(request), + session: session_from_request(request).await?, + }) + } +} + +#[async_trait] +impl<'r> FromRequest<'r> for RequestInfo { + type Error = MyError; + async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> { + match Self::from_request_ut(request).await { + Ok(a) => Outcome::Success(a), + Err(a) => Outcome::Error((Status::BadRequest, a)), + } + } +} |