use crate::http::{ReqResBuffer, Request, Response, StatusCode};
use core::ops::ControlFlow;
pub trait Middleware<CA, E, SA>
where
E: From<crate::Error>,
{
type Aux;
fn aux(&self) -> Self::Aux;
fn req(
&self,
conn_aux: &mut CA,
mw_aux: &mut Self::Aux,
req: &mut Request<ReqResBuffer>,
stream_aux: &mut SA,
) -> impl Future<Output = Result<ControlFlow<StatusCode, ()>, E>>;
fn res(
&self,
conn_aux: &mut CA,
mw_aux: &mut Self::Aux,
res: Response<&mut ReqResBuffer>,
stream_aux: &mut SA,
) -> impl Future<Output = Result<ControlFlow<StatusCode, ()>, E>>;
}