use crate::{
body::AsyncBody,
error::Error,
interceptor::{Context, Interceptor, InterceptorFuture},
};
use http::{HeaderMap, HeaderValue, Request};
pub(crate) struct DefaultHeadersInterceptor {
headers: HeaderMap<HeaderValue>,
}
impl From<HeaderMap<HeaderValue>> for DefaultHeadersInterceptor {
fn from(headers: HeaderMap<HeaderValue>) -> Self {
Self {
headers,
}
}
}
impl Interceptor for DefaultHeadersInterceptor {
type Err = Error;
fn intercept(
&self,
mut request: Request<AsyncBody>,
ctx: Context,
) -> InterceptorFuture<Self::Err> {
for name in self.headers.keys() {
if !request.headers().contains_key(name) {
for v in self.headers.get_all(name).iter() {
request.headers_mut().append(name, v.clone());
}
}
}
ctx.send(request)
}
}