use super::AgentOptionsBuilder;
use crate::{Error, Result};
use reqwest::header::{HeaderMap, HeaderName, HeaderValue};
use std::collections::BTreeMap;
impl AgentOptionsBuilder {
pub fn header(mut self, name: impl Into<String>, value: impl Into<String>) -> Self {
let name = name.into();
self.headers
.retain(|existing, _| !existing.eq_ignore_ascii_case(&name));
self.headers.insert(name, value.into());
self
}
}
pub(super) fn validate(headers: &BTreeMap<String, String>) -> Result<()> {
insert_all(&mut HeaderMap::new(), headers)
}
pub(crate) fn insert_all(target: &mut HeaderMap, headers: &BTreeMap<String, String>) -> Result<()> {
for (name, value) in headers {
let parsed_name = HeaderName::from_bytes(name.as_bytes())
.map_err(|_| Error::config(format!("Invalid HTTP header '{name}': invalid name")))?;
let parsed_value = HeaderValue::from_bytes(value.as_bytes())
.map_err(|_| Error::config(format!("Invalid HTTP header '{name}': invalid value")))?;
target.insert(parsed_name, parsed_value);
}
Ok(())
}