use std::collections::HashSet;
use super::string::remove_duplicates;
pub fn sanitize_policies(policies: &mut Vec<String>, add_default: bool) {
let mut default_found = false;
for p in policies.iter() {
let q = p.trim().to_lowercase();
if q.is_empty() {
continue;
}
if q == "root" {
policies.clear();
policies.push("root".to_string());
default_found = true;
break;
}
if q == "default" {
default_found = true;
}
}
if add_default && (!default_found || policies.is_empty()) {
policies.push("default".to_string());
}
remove_duplicates(policies, false, true)
}
pub fn equivalent_policies(a: &Vec<String>, b: &Vec<String>) -> bool {
if (a.is_empty() && b.is_empty())
|| (a.is_empty() && b.len() == 1 && b[0] == "default")
|| (b.is_empty() && a.len() == 1 && a[0] == "default")
{
return true;
} else if a.is_empty() || b.is_empty() {
return false;
}
let mut filtered_sorted_a: Vec<String> = a
.iter()
.filter(|s| *s != "default")
.cloned()
.collect::<HashSet<_>>()
.into_iter()
.collect::<Vec<_>>();
let mut filtered_sorted_b: Vec<String> = b
.iter()
.filter(|s| *s != "default")
.cloned()
.collect::<HashSet<_>>()
.into_iter()
.collect::<Vec<_>>();
filtered_sorted_a.sort();
filtered_sorted_b.sort();
filtered_sorted_a == filtered_sorted_b
}