Skip to main content

potree_auth/render/http/
extractors.rs

1use axum::extract::FromRequestParts;
2use http::request::Parts;
3use web_route::WebRoute;
4
5use super::super::application::service::RenderingService;
6use super::state::State;
7use crate::common::utils::http::render_error::RenderError;
8
9impl<S> FromRequestParts<S> for State
10where
11    S: Send + Sync,
12{
13    type Rejection = RenderError;
14
15    async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> {
16        let state = parts
17            .extensions
18            .get::<State>()
19            .ok_or(RenderError::StateExtraction)?;
20
21        Ok(state.clone())
22    }
23}
24
25impl<S> FromRequestParts<S> for RenderingService
26where
27    S: Send + Sync,
28{
29    type Rejection = RenderError;
30
31    async fn from_request_parts(parts: &mut Parts, state: &S) -> Result<Self, Self::Rejection> {
32        let state = State::from_request_parts(parts, state).await?;
33        Ok(state.rendering_service)
34    }
35}
36
37pub struct LoginRoute(pub WebRoute);
38
39impl<S> FromRequestParts<S> for LoginRoute
40where
41    S: Send + Sync,
42{
43    type Rejection = RenderError;
44
45    async fn from_request_parts(parts: &mut Parts, state: &S) -> Result<Self, Self::Rejection> {
46        let state = State::from_request_parts(parts, state).await?;
47        Ok(Self(state.login_route))
48    }
49}