use std::{collections::HashMap, str::FromStr};
use reqwest::{
header::{HeaderMap, HeaderName, HeaderValue},
RequestBuilder,
};
use super::ReqwestHooks;
pub struct AddHeaders {
headers: HeaderMap<HeaderValue>,
}
#[async_trait::async_trait]
impl ReqwestHooks for AddHeaders {
async fn before_send(&self, req: RequestBuilder) -> crate::Result<RequestBuilder> {
Ok(req.headers(self.headers.clone()))
}
}
impl TryFrom<HashMap<String, String>> for AddHeaders {
type Error = anyhow::Error;
fn try_from(value: HashMap<String, String>) -> Result<Self, Self::Error> {
let mut headers: HeaderMap<HeaderValue> = HeaderMap::new();
for (header, value) in value.into_iter() {
headers.insert(
HeaderName::from_str(header.as_str())?,
HeaderValue::from_str(value.as_str())?,
);
}
Ok(Self { headers })
}
}
impl AddHeaders {
pub fn new(headers: HeaderMap<HeaderValue>) -> Self {
Self { headers }
}
pub fn new_with_one(header: String, value: String) -> anyhow::Result<Self> {
let mut headers: HeaderMap<HeaderValue> = HeaderMap::new();
headers.insert(
HeaderName::from_str(header.as_str())?,
HeaderValue::from_str(value.as_str())?,
);
Ok(Self { headers })
}
}