use async_trait::async_trait;
use crate::Request;
use http::{Uri as HttpUri, Version as HttpVersion};
pub struct Path<T>(pub T);
pub struct Query<T>(pub T);
pub struct Json<T>(pub T);
pub struct Form<T>(pub T);
pub struct State<T>(pub T);
#[deprecated(
since = "2.16.0",
note = "请使用 State<T> 代替,Configs<T> 将在 v2.18.0 移除"
)]
pub struct Configs<T>(pub T);
pub struct Extension<T>(pub T);
pub struct TypedHeader<H>(pub H);
pub struct Method(pub crate::Method);
pub struct Uri(pub HttpUri);
pub struct Version(pub HttpVersion);
pub struct RemoteAddr(pub crate::core::remote_addr::RemoteAddr);
#[async_trait]
pub trait RequestExt {
async fn extract<T>(&mut self) -> Result<T, T::Rejection>
where
T: super::FromRequest + Send + 'static;
}
#[async_trait]
impl RequestExt for Request {
async fn extract<T>(&mut self) -> Result<T, T::Rejection>
where
T: super::FromRequest + Send + 'static,
{
T::from_request(self).await
}
}