diff options
Diffstat (limited to 'src/extract/json.rs')
| -rw-r--r-- | src/extract/json.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/extract/json.rs b/src/extract/json.rs new file mode 100644 index 0000000..cfde15b --- /dev/null +++ b/src/extract/json.rs | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | use axum::extract::rejection::JsonRejection; | ||
| 2 | use axum::extract::{FromRequest, Request}; | ||
| 3 | |||
| 4 | use crate::error::ApiError; | ||
| 5 | |||
| 6 | pub struct ApiJson<T>(pub T); | ||
| 7 | |||
| 8 | impl<S, T> FromRequest<S> for ApiJson<T> | ||
| 9 | where | ||
| 10 | axum::Json<T>: FromRequest<S, Rejection = JsonRejection>, | ||
| 11 | S: Send + Sync, | ||
| 12 | { | ||
| 13 | type Rejection = ApiError; | ||
| 14 | |||
| 15 | #[inline] | ||
| 16 | async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> { | ||
| 17 | Ok(Self(axum::Json::<T>::from_request(req, state).await?.0)) | ||
| 18 | } | ||
| 19 | } | ||
