use crate::{IntoResponse, Request};
#[cfg(feature = "openapi")]
use crate::openapi;
pub trait FromRequest<'req>: Sized {
type Error: IntoResponse;
fn from_request(req: &'req Request) -> Option<Result<Self, Self::Error>>;
#[cfg(feature = "openapi")]
fn openapi_inbound() -> openapi::Inbound {
openapi::Inbound::None
}
#[doc(hidden)]
fn n_pathparams() -> usize {
0
}
}
const _: () = {
impl<'req> FromRequest<'req> for &'req Request {
type Error = std::convert::Infallible;
fn from_request(req: &'req Request) -> Option<Result<Self, Self::Error>> {
Some(Ok(req))
}
}
impl<'req, FR: FromRequest<'req>> FromRequest<'req> for Option<FR> {
type Error = FR::Error;
#[inline]
fn from_request(req: &'req Request) -> Option<Result<Self, Self::Error>> {
match FR::from_request(req) {
None => Some(Ok(None)),
Some(fr) => Some(fr.map(Some)),
}
}
#[cfg(feature = "openapi")]
fn openapi_inbound() -> openapi::Inbound {
FR::openapi_inbound()
}
}
};
#[cfg(feature = "rt_worker")]
const _: () = {
impl<'req> FromRequest<'req> for &'req ::worker::Env {
type Error = std::convert::Infallible;
#[inline(always)]
fn from_request(req: &'req Request) -> Option<Result<Self, Self::Error>> {
Some(Ok(req.context.env()))
}
}
impl<'req> FromRequest<'req> for &'req ::worker::Context {
type Error = std::convert::Infallible;
#[inline(always)]
fn from_request(req: &'req Request) -> Option<Result<Self, Self::Error>> {
Some(Ok(req.context.worker()))
}
}
};