use std::future::Future;
use ::http::{HeaderName, HeaderValue};
use super::{Middleware, Next};
use crate::context::Context;
use crate::worker::Outcome;
#[derive(Debug, Clone)]
pub struct SetHeader {
name: HeaderName,
value: HeaderValue,
}
impl SetHeader {
#[must_use]
pub const fn new(name: HeaderName, value: HeaderValue) -> Self {
Self { name, value }
}
}
impl<C: Send + 'static> Middleware<C> for SetHeader {
fn handle(&self, mut cx: Context<C>, next: Next<C>) -> impl Future<Output = Outcome> + Send {
let headers = cx.request_mut().headers_mut();
if !headers.contains_key(&self.name) {
headers.insert(self.name.clone(), self.value.clone());
}
next.run(cx)
}
}