aboutsummaryrefslogtreecommitdiff
path: root/server/src/helper/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/helper/mod.rs')
-rw-r--r--server/src/helper/mod.rs30
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)),
+ }
+ }
+}