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, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for &'a SocketAddr

Source§

type Type<'b> = &'b SocketAddr

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for SocketAddr

Source§

type Type<'b> = SocketAddr

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for ()

Source§

type Type<'b> = ()

Source§

type Error = Error

Source§

async fn from_request(_: &'a WebContext<'r, C, B>) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for String
where B: BodyStream + Default,

Source§

type Type<'b> = String

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for Vec<u8>
where B: BodyStream + Default,

Source§

type Type<'b> = Vec<u8>

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for Option<T>
where T: FromRequest<'a, WebContext<'r, C, B>>,

Source§

type Type<'b> = Option<<T as FromRequest<'a, WebContext<'r, C, B>>>::Type<'b>>

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B, T, E> FromRequest<'a, WebContext<'r, C, B>> for Result<T, E>
where T: FromRequest<'a, WebContext<'r, C, B>, Error = E>,

Source§

type Type<'b> = Result<<T as FromRequest<'a, WebContext<'r, C, B>>>::Type<'b>, <T as FromRequest<'a, WebContext<'r, C, B>>>::Error>

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B, const LIMIT: usize> FromRequest<'a, WebContext<'r, C, B>> for (Bytes, Limit<LIMIT>)
where B: BodyStream + Default,

Source§

type Type<'b> = (Bytes, Limit<LIMIT>)

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B, const LIMIT: usize> FromRequest<'a, WebContext<'r, C, B>> for (BytesMut, Limit<LIMIT>)
where B: BodyStream + Default,

Source§

type Type<'b> = (BytesMut, Limit<LIMIT>)

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

impl<'a, 'r, C, B, const LIMIT: usize> FromRequest<'a, WebContext<'r, C, B>> for (Vec<u8>, Limit<LIMIT>)
where B: BodyStream + Default,

Source§

type Type<'b> = (Vec<u8>, Limit<LIMIT>)

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Source§

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

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<(A,), <(A,) as FromRequest<'a, Req>>::Error>

Source§

impl<'a, Req, A, B> FromRequest<'a, Req> for (A, B)
where A: FromRequest<'a, Req>, B: FromRequest<'a, Req>, <A as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::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<(A, B), <(A, B) as FromRequest<'a, Req>>::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 as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::Error> + From<<C as FromRequest<'a, Req>>::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<(A, B, C), <(A, B, C) as FromRequest<'a, Req>>::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 as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::Error> + From<<C as FromRequest<'a, Req>>::Error> + From<<D as FromRequest<'a, Req>>::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<(A, B, C, D), <(A, B, C, D) as FromRequest<'a, Req>>::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 as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::Error> + From<<C as FromRequest<'a, Req>>::Error> + From<<D as FromRequest<'a, Req>>::Error> + From<<E as FromRequest<'a, Req>>::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<(A, B, C, D, E), <(A, B, C, D, E) as FromRequest<'a, Req>>::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 as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::Error> + From<<C as FromRequest<'a, Req>>::Error> + From<<D as FromRequest<'a, Req>>::Error> + From<<E as FromRequest<'a, Req>>::Error> + From<<F as FromRequest<'a, Req>>::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<(A, B, C, D, E, F), <(A, B, C, D, E, F) as FromRequest<'a, Req>>::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 as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::Error> + From<<C as FromRequest<'a, Req>>::Error> + From<<D as FromRequest<'a, Req>>::Error> + From<<E as FromRequest<'a, Req>>::Error> + From<<F as FromRequest<'a, Req>>::Error> + From<<G as FromRequest<'a, Req>>::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<(A, B, C, D, E, F, G), <(A, B, C, D, E, F, G) as FromRequest<'a, Req>>::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 as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::Error> + From<<C as FromRequest<'a, Req>>::Error> + From<<D as FromRequest<'a, Req>>::Error> + From<<E as FromRequest<'a, Req>>::Error> + From<<F as FromRequest<'a, Req>>::Error> + From<<G as FromRequest<'a, Req>>::Error> + From<<H as FromRequest<'a, Req>>::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<(A, B, C, D, E, F, G, H), <(A, B, C, D, E, F, G, H) as FromRequest<'a, Req>>::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 as FromRequest<'a, Req>>::Error: From<<B as FromRequest<'a, Req>>::Error> + From<<C as FromRequest<'a, Req>>::Error> + From<<D as FromRequest<'a, Req>>::Error> + From<<E as FromRequest<'a, Req>>::Error> + From<<F as FromRequest<'a, Req>>::Error> + From<<G as FromRequest<'a, Req>>::Error> + From<<H as FromRequest<'a, Req>>::Error> + From<<I as FromRequest<'a, Req>>::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<(A, B, C, D, E, F, G, H, I), <(A, B, C, D, E, F, G, H, I) as FromRequest<'a, Req>>::Error>

Implementors§

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for &'a HeaderMap

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for &'a Method

Source§

type Type<'b> = &'b Method

Source§

type Error = Error

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for &'a RequestExt<()>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for &'a Uri

Source§

type Type<'b> = &'b Uri

Source§

type Error = Error

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for &'a WebContext<'a, C, B>
where C: 'static, B: 'static,

Source§

type Type<'b> = &'b WebContext<'b, C, B>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for &'a WebRequest<()>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for Bytes
where B: BodyStream + Default,

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for BytesMut
where B: BodyStream + Default,

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for HeaderMap

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for Method

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for RequestExt<()>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for Uri

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for Body<B>
where B: BodyStream + Default,

Source§

type Type<'b> = Body<B>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for ExtensionKey

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for StateKey
where C: Borrow<Self>,

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for ExtensionsRef<'a>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for ParamsRef<'a>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for PathOwn

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for PathRef<'a>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for UriOwn

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for UriRef<'a>

Source§

type Type<'b> = UriRef<'b>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for WebSocket<B>
where C: 'static, B: BodyStream + Default + 'static,

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for WebRequest<()>

Source§

impl<'a, 'r, C, B> FromRequest<'a, WebContext<'r, C, B>> for Multipart<B>
where B: BodyStream + Default,

Source§

impl<'a, 'r, C, B, K> FromRequest<'a, WebContext<'r, C, B>> for CookieJar<K>
where K: for<'a2, 'r2> FromRequest<'a2, WebContext<'r2, C, B>, Error = Error>,

Source§

impl<'a, 'r, C, B, K> FromRequest<'a, WebContext<'r, C, B>> for Private<K>
where K: for<'a2, 'r2> FromRequest<'a2, WebContext<'r2, C, B>, Error = Error> + Into<Key>,

Source§

impl<'a, 'r, C, B, K> FromRequest<'a, WebContext<'r, C, B>> for Signed<K>
where K: for<'a2, 'r2> FromRequest<'a2, WebContext<'r2, C, B>, Error = Error> + Into<Key>,

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for ExtensionOwn<T>
where T: Send + Sync + Clone + 'static,

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for ExtensionRef<'a, T>
where T: Send + Sync + 'static,

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for LazyParams<'a, T>

Source§

type Type<'b> = LazyParams<'b, T>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for LazyQuery<'a, T>
where T: Deserialize<'static>,

Source§

type Type<'b> = LazyQuery<'b, T>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for Query<T>
where T: for<'de> Deserialize<'de>,

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for StateOwn<T>
where C: BorrowState<T>, T: Clone,

Source§

impl<'a, 'r, C, B, T> FromRequest<'a, WebContext<'r, C, B>> for StateRef<'a, T>
where C: BorrowState<T>, T: ?Sized + 'static,

Source§

type Type<'b> = StateRef<'b, T>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B, T, const LIMIT: usize> FromRequest<'a, WebContext<'r, C, B>> for Form<T, LIMIT>
where B: BodyStream + Default, T: for<'de> Deserialize<'de>,

Source§

type Type<'b> = Form<T, LIMIT>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B, T, const LIMIT: usize> FromRequest<'a, WebContext<'r, C, B>> for LazyForm<T, LIMIT>
where B: BodyStream + Default, T: Deserialize<'static>,

Source§

type Type<'b> = LazyForm<T, LIMIT>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B, T, const LIMIT: usize> FromRequest<'a, WebContext<'r, C, B>> for Json<T, LIMIT>
where B: BodyStream + Default, T: for<'de> Deserialize<'de>,

Source§

type Type<'b> = Json<T, LIMIT>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B, T, const LIMIT: usize> FromRequest<'a, WebContext<'r, C, B>> for LazyJson<T, LIMIT>
where B: BodyStream + Default, T: Deserialize<'static>,

Source§

type Type<'b> = LazyJson<T, LIMIT>

Source§

type Error = Error

Source§

impl<'a, 'r, C, B, const HEADER_NAME: usize> FromRequest<'a, WebContext<'r, C, B>> for HeaderRef<'a, HEADER_NAME>

Source§

type Type<'b> = HeaderRef<'b, HEADER_NAME>

Source§

type Error = Error

Source§

impl<'a, 'r, T, C, B> FromRequest<'a, WebContext<'r, C, B>> for Params<T>
where T: for<'de> Deserialize<'de>,

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 Request<Ext>
where Ext: 'static,

Source§

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

Source§

type Error = Infallible

Source§

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