use crate::server::Serve;
mod before;
mod after;
mod before_and_after;
pub use after::{AfterRequest, ServeThenHook};
pub use before::{before, BeforeRequest, BeforeRequestCons, BeforeRequestList, BeforeRequestNil, HookThenServe};
pub use before_and_after::HookThenServeThenHook;
pub trait RequestHook: Serve {
fn before<Hook>(self, hook: Hook) -> HookThenServe<Self, Hook>
where
Hook: BeforeRequest<Self::Req>,
Self: Sized,
{
HookThenServe::new(self, hook)
}
fn after<Hook>(self, hook: Hook) -> ServeThenHook<Self, Hook>
where
Hook: AfterRequest<Self::Resp>,
Self: Sized,
{
ServeThenHook::new(self, hook)
}
fn before_and_after<Hook>(self, hook: Hook) -> HookThenServeThenHook<Self::Req, Self::Resp, Self, Hook>
where
Hook: BeforeRequest<Self::Req> + AfterRequest<Self::Resp>,
Self: Sized,
{
HookThenServeThenHook::new(self, hook)
}
}
impl<S: Serve> RequestHook for S {}