axum_prehandle/prefabs/
path.rs

1use 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}