use bytes::Bytes;
use http::{Extensions, HeaderMap, Method, StatusCode, Uri};
use super::Result;
use crate::wasm_compat::{WasmBoxedFuture, WasmCompatSend, WasmCompatSync};
#[derive(Clone, Copy, Debug)]
#[non_exhaustive]
pub struct Exchange<'a> {
pub method: &'a Method,
pub uri: &'a Uri,
pub extensions: &'a Extensions,
}
pub trait HttpMiddleware: WasmCompatSend + WasmCompatSync {
fn before_request_headers<'a>(
&'a self,
_exchange: Exchange<'a>,
_headers: &'a mut HeaderMap,
) -> WasmBoxedFuture<'a, Result<()>> {
Box::pin(async { Ok(()) })
}
fn before_request_body<'a>(
&'a self,
_exchange: Exchange<'a>,
_headers: &'a HeaderMap,
body: Bytes,
) -> WasmBoxedFuture<'a, Result<Bytes>> {
Box::pin(async move { Ok(body) })
}
fn after_response<'a>(
&'a self,
_exchange: Exchange<'a>,
_status: StatusCode,
_headers: &'a HeaderMap,
) -> WasmBoxedFuture<'a, Result<()>> {
Box::pin(async { Ok(()) })
}
}