axum-prehandle 0.1.2

Prehandle for axum
Documentation
use std::marker::PhantomData;

use async_trait::async_trait;
use axum::extract::{rejection::QueryRejection, FromRequest, Query, RequestParts};
use serde::Deserialize;

use crate::PreHandler;

pub struct QueryParams<T>(PhantomData<T>)
where
    T: for<'de> Deserialize<'de>;

#[async_trait]
impl<B, T> PreHandler<B> for QueryParams<T>
where
    T: for<'de> Deserialize<'de>,
    B: Send,
{
    type Output = T;

    type Rejection = QueryRejection;

    async fn handling(request: &mut RequestParts<B>) -> Result<Self::Output, Self::Rejection> {
        let Query(data) = Query::from_request(request).await?;
        Ok(data)
    }
}