diff options
author | metamuffin <metamuffin@disroot.org> | 2025-05-20 15:59:51 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-05-20 15:59:51 +0200 |
commit | a1db84ac3b776e929ce3286b6f77dd1ca97ea249 (patch) | |
tree | d9f271a0af46960c3d4a65f0213d1a27ca99b737 /server/src/helper/mod.rs | |
parent | 09f86ee5b25fbddf667ef98a22eaa076cedba23c (diff) | |
download | jellything-a1db84ac3b776e929ce3286b6f77dd1ca97ea249.tar jellything-a1db84ac3b776e929ce3286b6f77dd1ca97ea249.tar.bz2 jellything-a1db84ac3b776e929ce3286b6f77dd1ca97ea249.tar.zst |
requestinfo from request impl
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)), + } + } +} |