refact(backend): get_group_packages_map

This commit is contained in:
steven-omaha
2023-03-17 17:01:21 +01:00
parent c27eb35575
commit 9b8f2712d3
+17 -10
View File
@@ -1,6 +1,8 @@
use std::any::Any; use std::any::Any;
use std::cmp::{Eq, Ord};
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::fmt::Debug; use std::fmt::Debug;
use std::hash::Hash;
use std::process::{Command, ExitStatus}; use std::process::{Command, ExitStatus};
use std::rc::Rc; use std::rc::Rc;
@@ -60,7 +62,7 @@ pub trait Backend: Debug {
/// Assign each of the packages to an individual group by editing the /// Assign each of the packages to an individual group by editing the
/// group files. /// group files.
fn assign_group(&self, to_assign: Vec<(Package, Rc<Group>)>) -> Result<()> { fn assign_group(&self, to_assign: Vec<(Package, Rc<Group>)>) -> Result<()> {
let group_package_map = get_group_packages_map(to_assign); let group_package_map = to_hashmap(to_assign);
let section_header = format!("[{}]", self.get_section()); let section_header = format!("[{}]", self.get_section());
for (group, packages) in group_package_map { for (group, packages) in group_package_map {
@@ -146,18 +148,23 @@ pub trait Backend: Debug {
fn supports_as_dependency(&self) -> bool; fn supports_as_dependency(&self) -> bool;
} }
fn get_group_packages_map( /// For a vector of tuples containing a `V` and `K`, where a `K` may occur more than
to_assign: Vec<(Package, Rc<Group>)>, /// once and each `V` exactly once, create a `HashMap` that associates each `K` with
) -> HashMap<Rc<Group>, Vec<Package>> { /// a `Vec<V>`.
let mut group_package_map = HashMap::new(); fn to_hashmap<K, V>(to_assign: Vec<(V, K)>) -> HashMap<K, Vec<V>>
where
K: Hash + Eq,
V: Ord,
{
let mut map = HashMap::new();
for (p, group) in to_assign { for (value, key) in to_assign {
let inner = group_package_map.entry(group).or_insert(vec![]); let inner = map.entry(key).or_insert(vec![]);
inner.push(p); inner.push(value);
} }
for vecs in group_package_map.values_mut() { for vecs in map.values_mut() {
vecs.sort(); vecs.sort();
} }
group_package_map map
} }