potree_auth/render/http/
extractors.rs1use 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}