use super::HttpProxyConnector;
use rama_core::Layer;
use rama_http::{
HeaderValue,
proto::h1::{Http1HeaderMap, IntoHttp1HeaderName},
};
use rama_http_types::Version;
use rama_utils::macros::generate_set_and_with;
#[derive(Debug, Clone, Default)]
pub struct HttpProxyConnectorLayer {
required: bool,
version: Option<Version>,
headers: Option<Http1HeaderMap>,
}
impl HttpProxyConnectorLayer {
#[must_use]
pub fn optional() -> Self {
Self {
required: false,
version: Some(Version::HTTP_11),
headers: None,
}
}
#[must_use]
pub fn required() -> Self {
Self {
required: true,
version: Some(Version::HTTP_11),
headers: None,
}
}
generate_set_and_with! {
pub fn version(mut self, version: Version) -> Self {
self.version = Some(version);
self
}
}
generate_set_and_with! {
pub fn custom_header(
mut self,
name: impl IntoHttp1HeaderName,
value: HeaderValue,
) -> Self {
self.headers.get_or_insert_default().append(name, value);
self
}
}
}
impl<S> Layer<S> for HttpProxyConnectorLayer {
type Service = HttpProxyConnector<S>;
fn layer(&self, inner: S) -> Self::Service {
HttpProxyConnector {
inner,
required: self.required,
version: self.version,
headers: self.headers.clone(),
}
}
}