pub trait FromRequest<'a, Req>: Sized {
    type Type<'b>: FromRequest<'b, Req, Error = Self::Error>;
    type Error;

    // Required method
    fn from_request(
        req: &'a Req
    ) -> impl Future<Output = Result<Self, Self::Error>>;
}
Expand description

Extract type from Req asynchronously and receive them with function passed to handler_service.

'a is the lifetime of the extracted type.

When Req is also a borrowed type, the lifetimes of Req type and of the extracted type should be kept separate. See example below of extracting &str from &String:

§Examples


// new type for implementing FromRequest trait to &str.
struct Str<'a>(&'a str);

// borrowed Req type has a named lifetime of it self while trait implementor has the same lifetime
// from FromRequest's lifetime param.
impl<'a, 'r> FromRequest<'a, &'r String> for Str<'a> {
    type Type<'b> = Str<'b>; // use GAT lifetime to output a named lifetime instance of implementor.
    type Error = ();

    async fn from_request(req: &'a &'r String) -> Result<Self, Self::Error> {
        Ok(Str(req))
    }
}

let input = &String::from("996");
let extract = Str::from_request(&input).await.unwrap();
assert_eq!(extract.0, input.as_str());

Required Associated Types§

source

type Type<'b>: FromRequest<'b, Req, Error = Self::Error>

source

type Error

Required Methods§

source

fn from_request(req: &'a Req) -> impl Future<Output = Result<Self, Self::Error>>

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'a, B> FromRequest<'a, Request<RequestExt<B>>> for &'a SocketAddr

§

type Type<'b> = &'b SocketAddr

§

type Error = Infallible

source§

async fn from_request( req: &'a Request<RequestExt<B>> ) -> Result<Self, Self::Error>

source§

impl<'a, Req, A> FromRequest<'a, Req> for (A,)
where A: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>,)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B> FromRequest<'a, Req> for (A, B)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B, C> FromRequest<'a, Req> for (A, B, C)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error> + From<C::Error>, C: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>, <C as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B, C, D> FromRequest<'a, Req> for (A, B, C, D)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error> + From<C::Error> + From<D::Error>, C: FromRequest<'a, Req>, D: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>, <C as FromRequest<'a, Req>>::Type<'r>, <D as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B, C, D, E> FromRequest<'a, Req> for (A, B, C, D, E)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error> + From<C::Error> + From<D::Error> + From<E::Error>, C: FromRequest<'a, Req>, D: FromRequest<'a, Req>, E: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>, <C as FromRequest<'a, Req>>::Type<'r>, <D as FromRequest<'a, Req>>::Type<'r>, <E as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B, C, D, E, F> FromRequest<'a, Req> for (A, B, C, D, E, F)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error> + From<C::Error> + From<D::Error> + From<E::Error> + From<F::Error>, C: FromRequest<'a, Req>, D: FromRequest<'a, Req>, E: FromRequest<'a, Req>, F: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>, <C as FromRequest<'a, Req>>::Type<'r>, <D as FromRequest<'a, Req>>::Type<'r>, <E as FromRequest<'a, Req>>::Type<'r>, <F as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B, C, D, E, F, G> FromRequest<'a, Req> for (A, B, C, D, E, F, G)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error> + From<C::Error> + From<D::Error> + From<E::Error> + From<F::Error> + From<G::Error>, C: FromRequest<'a, Req>, D: FromRequest<'a, Req>, E: FromRequest<'a, Req>, F: FromRequest<'a, Req>, G: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>, <C as FromRequest<'a, Req>>::Type<'r>, <D as FromRequest<'a, Req>>::Type<'r>, <E as FromRequest<'a, Req>>::Type<'r>, <F as FromRequest<'a, Req>>::Type<'r>, <G as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B, C, D, E, F, G, H> FromRequest<'a, Req> for (A, B, C, D, E, F, G, H)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error> + From<C::Error> + From<D::Error> + From<E::Error> + From<F::Error> + From<G::Error> + From<H::Error>, C: FromRequest<'a, Req>, D: FromRequest<'a, Req>, E: FromRequest<'a, Req>, F: FromRequest<'a, Req>, G: FromRequest<'a, Req>, H: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>, <C as FromRequest<'a, Req>>::Type<'r>, <D as FromRequest<'a, Req>>::Type<'r>, <E as FromRequest<'a, Req>>::Type<'r>, <F as FromRequest<'a, Req>>::Type<'r>, <G as FromRequest<'a, Req>>::Type<'r>, <H as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

source§

impl<'a, Req, A, B, C, D, E, F, G, H, I> FromRequest<'a, Req> for (A, B, C, D, E, F, G, H, I)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, A::Error: From<B::Error> + From<C::Error> + From<D::Error> + From<E::Error> + From<F::Error> + From<G::Error> + From<H::Error> + From<I::Error>, C: FromRequest<'a, Req>, D: FromRequest<'a, Req>, E: FromRequest<'a, Req>, F: FromRequest<'a, Req>, G: FromRequest<'a, Req>, H: FromRequest<'a, Req>, I: FromRequest<'a, Req>,

§

type Type<'r> = (<A as FromRequest<'a, Req>>::Type<'r>, <B as FromRequest<'a, Req>>::Type<'r>, <C as FromRequest<'a, Req>>::Type<'r>, <D as FromRequest<'a, Req>>::Type<'r>, <E as FromRequest<'a, Req>>::Type<'r>, <F as FromRequest<'a, Req>>::Type<'r>, <G as FromRequest<'a, Req>>::Type<'r>, <H as FromRequest<'a, Req>>::Type<'r>, <I as FromRequest<'a, Req>>::Type<'r>)

§

type Error = <A as FromRequest<'a, Req>>::Error

source§

async fn from_request(req: &'a Req) -> Result<Self, Self::Error>

Implementors§

source§

impl<'a, Ext> FromRequest<'a, Request<Ext>> for &'a Extensions

§

type Type<'b> = &'b Extensions

§

type Error = Infallible

source§

impl<'a, Ext> FromRequest<'a, Request<Ext>> for &'a HeaderMap

§

type Type<'b> = &'b HeaderMap

§

type Error = Infallible

source§

impl<'a, Ext> FromRequest<'a, Request<Ext>> for &'a Method

§

type Type<'b> = &'b Method

§

type Error = Infallible

source§

impl<'a, Ext> FromRequest<'a, Request<Ext>> for &'a Uri

§

type Type<'b> = &'b Uri

§

type Error = Infallible

source§

impl<'a, Ext> FromRequest<'a, Request<Ext>> for &'a Request<Ext>
where Ext: 'static,

§

type Type<'b> = &'b Request<Ext>

§

type Error = Infallible