aboutsummaryrefslogtreecommitdiff
path: root/src/extract/json.rs
blob: cfde15b3a0a69f228d3eddfdc1b59fe89fd2f6a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use axum::extract::rejection::JsonRejection;
use axum::extract::{FromRequest, Request};

use crate::error::ApiError;

pub struct ApiJson<T>(pub T);

impl<S, T> FromRequest<S> for ApiJson<T>
where
    axum::Json<T>: FromRequest<S, Rejection = JsonRejection>,
    S: Send + Sync,
{
    type Rejection = ApiError;

    #[inline]
    async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> {
        Ok(Self(axum::Json::<T>::from_request(req, state).await?.0))
    }
}