use crate::errors::ApiError;
use axum::{
async_trait,
extract::{FromRequest, Request},
Json,
};
use serde::de::DeserializeOwned;
pub struct ValidatedJson<T>(pub T);
#[async_trait]
impl<S, T> FromRequest<S> for ValidatedJson<T>
where
S: Send + Sync,
T: DeserializeOwned,
{
type Rejection = ApiError;
async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> {
let Json(payload) = Json::<T>::from_request(req, state).await?;
Ok(ValidatedJson(payload))
}
}