sova_core/extract/
json.rs1use super::{ExtractFuture, FromRequest};
2use crate::error::Result;
3use crate::request::Request;
4use serde::de::DeserializeOwned;
5
6#[derive(Debug, Clone)]
10pub struct Json<T>(pub T);
11
12impl<T> Json<T> {
13 pub fn into_inner(self) -> T {
14 self.0
15 }
16}
17
18impl<T> std::ops::Deref for Json<T> {
19 type Target = T;
20 fn deref(&self) -> &Self::Target {
21 &self.0
22 }
23}
24
25impl<T: DeserializeOwned + Send + 'static> FromRequest for Json<T> {
26 fn from_request(req: &mut Request) -> ExtractFuture<'_, Result<Self>> {
27 Box::pin(async move {
28 let value: T = req.json().await?;
29 Ok(Json(value))
30 })
31 }
32}