Skip to main content

coman/core/
utils.rs

1use std::collections::HashMap;
2
3use reqwest::header::HeaderMap;
4
5/// Merge headers, replacing existing ones and removing those with empty values
6pub fn merge_headers(
7    existing: Vec<(String, String)>,
8    new_headers: &[(String, String)],
9) -> Vec<(String, String)> {
10    let mut merged: HashMap<String, String> = existing.into_iter().collect();
11    for (key, value) in new_headers.iter() {
12        if merged.contains_key(key) {
13            if value.is_empty() {
14                merged.remove(key);
15            } else {
16                merged.entry(key.clone()).and_modify(|v| *v = value.clone());
17            }
18        } else {
19            merged.insert(key.clone(), value.clone());
20        }
21    }
22    merged.into_iter().collect()
23}
24
25/// Build a HeaderMap from a vector of key-value pairs
26pub fn build_header_map(headers: &[(String, String)]) -> HeaderMap {
27    let mut header_map = HeaderMap::new();
28    for (key, value) in headers {
29        if let Ok(header_name) = key.parse::<reqwest::header::HeaderName>() {
30            if let Ok(header_value) = value.parse() {
31                header_map.insert(header_name, header_value);
32            }
33        }
34    }
35    header_map
36}