use http::HeaderMap;
use parlov_core::Error;
pub(crate) fn parse_headers(raw: &[String]) -> Result<HeaderMap, Error> {
let mut headers = HeaderMap::new();
for entry in raw {
let (name, value) = split_header(entry)?;
let hname = name
.parse::<http::header::HeaderName>()
.map_err(|e| Error::Http(format!("invalid header name '{name}': {e}")))?;
let hvalue = value
.parse::<http::header::HeaderValue>()
.map_err(|e| Error::Http(format!("invalid header value '{value}': {e}")))?;
headers.insert(hname, hvalue);
}
Ok(headers)
}
pub(crate) fn split_header(entry: &str) -> Result<(&str, &str), Error> {
entry
.split_once(": ")
.ok_or_else(|| Error::Http(format!("header must be 'Name: Value', got '{entry}'")))
}