Trait FromRequest

Source
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>>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

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

Source§

type Type<'b> = &'b SocketAddr

Source§

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>,

Source§

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

Source§

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>,

Source§

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

Source§

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>,

Source§

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

Source§

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>,

Source§

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>)

Source§

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>,

Source§

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>)

Source§

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>,

Source§

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>)

Source§

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>,

Source§

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>)

Source§

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>,

Source§

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>)

Source§

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>,

Source§

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>)

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

type Error = Infallible