request_pretreat/prefabs/
query.rs

1use std::marker::PhantomData;
2
3use actix_web::error::QueryPayloadError;
4
5use crate::Treater;
6
7pub struct QueryArgs<T: for<'de> serde::Deserialize<'de>>(PhantomData<T>);
8
9impl<T> Treater for QueryArgs<T>
10where
11    T: for<'de> serde::Deserialize<'de>,
12{
13    type Fut = futures_util::future::Ready<Result<Self::Resp, Self::Err>>;
14
15    type Resp = T;
16
17    type Err = QueryPayloadError;
18
19    fn proc(req: &actix_web::HttpRequest, _: &mut actix_web::dev::Payload) -> Self::Fut {
20        let query = req.query_string();
21        let q =
22            actix_web::web::Query::<T>::from_query(query).map(actix_web::web::Query::into_inner);
23
24        futures_util::future::ready(q)
25    }
26}