aboutsummaryrefslogtreecommitdiff
path: root/src/extract/json.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/extract/json.rs')
-rw-r--r--src/extract/json.rs19
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 @@
1use axum::extract::rejection::JsonRejection;
2use axum::extract::{FromRequest, Request};
3
4use crate::error::ApiError;
5
6pub struct ApiJson<T>(pub T);
7
8impl<S, T> FromRequest<S> for ApiJson<T>
9where
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}