use crate::{body::Body, response::IntoResponse};
use async_trait::async_trait;
use bytes::Bytes;
use http::{header, Request, Response};
use rejection::{
BodyAlreadyTaken, FailedToBufferBody, InvalidJsonBody, InvalidUrlParam, InvalidUtf8,
LengthRequired, MissingExtension, MissingJsonContentType, MissingRouteParams, PayloadTooLarge,
QueryStringMissing,
};
use serde::de::DeserializeOwned;
use std::{collections::HashMap, convert::Infallible, str::FromStr};
pub mod rejection;
#[async_trait]
pub trait FromRequest: Sized {
type Rejection: IntoResponse;
async fn from_request(req: &mut Request
) -> Result;
}
#[async_trait]
impl FromRequest for Option
where
T: FromRequest,
{
type Rejection = Infallible;
async fn from_request(req: &mut Request) -> Result