use std::{
collections::HashMap,
fs::File,
io::{BufRead, BufReader},
path::Path,
};
use crate::{Binding, Network};
pub fn load_certid_map(path: &Path) -> HashMap<String, String> {
let mut map = HashMap::new();
let file = File::open(path).expect("FIXME");
for line in BufReader::new(file).lines() {
let line = line.expect("FIXME");
let Some((a, b)) = line.split_once(',') else {
panic!("FIXME")
};
map.insert(a.trim().to_string(), b.trim().to_string());
}
map
}
pub fn map_names(input: &Network, map: HashMap<String, String>) -> Network {
let apply_map = |input: &str| map.get(input).map_or(input, |v| v).to_string();
let mut output = Network::new();
for certification in input.certifications.values().flatten() {
output.add_binding(
apply_map(&certification.issuer.0).into(),
Binding {
cert: apply_map(&certification.target.cert.0).into(),
identity: certification.target.identity.clone(),
},
);
}
for delegation in input.delegations.values().flatten() {
output.add_delegation(
apply_map(&delegation.issuer.0).into(),
apply_map(&delegation.target.0).into(),
delegation.trust_amount,
delegation.trust_depth,
delegation.regexes.clone(),
);
}
output
}