axum_prehandle/prefabs/
path.rs1use std::marker::PhantomData;
2
3use async_trait::async_trait;
4use axum::extract::{rejection::PathRejection, FromRequest, Path, RequestParts};
5use serde::Deserialize;
6
7use crate::PreHandler;
8
9pub struct PathValue<T>(PhantomData<T>)
10where
11 T: for<'de> Deserialize<'de> + Send;
12
13#[async_trait]
14impl<B, T> PreHandler<B> for PathValue<T>
15where
16 B: Send,
17 T: for<'de> Deserialize<'de> + Send,
18{
19 type Output = T;
20
21 type Rejection = PathRejection;
22
23 async fn handling(request: &mut RequestParts<B>) -> Result<Self::Output, Self::Rejection> {
24 let Path(data) = Path::from_request(request).await?;
25 Ok(data)
26 }
27}