From 9b8f2712d3bffa8e013d469fc13f47abc5b9e2b8 Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Fri, 17 Mar 2023 17:01:10 +0100 Subject: [PATCH] refact(backend): get_group_packages_map --- .../pacdef_core/src/backend/backend_trait.rs | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/crates/pacdef_core/src/backend/backend_trait.rs b/crates/pacdef_core/src/backend/backend_trait.rs index a2d35ac..2e20975 100644 --- a/crates/pacdef_core/src/backend/backend_trait.rs +++ b/crates/pacdef_core/src/backend/backend_trait.rs @@ -1,6 +1,8 @@ use std::any::Any; +use std::cmp::{Eq, Ord}; use std::collections::{HashMap, HashSet}; use std::fmt::Debug; +use std::hash::Hash; use std::process::{Command, ExitStatus}; use std::rc::Rc; @@ -60,7 +62,7 @@ pub trait Backend: Debug { /// Assign each of the packages to an individual group by editing the /// group files. fn assign_group(&self, to_assign: Vec<(Package, Rc)>) -> 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()); for (group, packages) in group_package_map { @@ -146,18 +148,23 @@ pub trait Backend: Debug { fn supports_as_dependency(&self) -> bool; } -fn get_group_packages_map( - to_assign: Vec<(Package, Rc)>, -) -> HashMap, Vec> { - let mut group_package_map = HashMap::new(); +/// For a vector of tuples containing a `V` and `K`, where a `K` may occur more than +/// once and each `V` exactly once, create a `HashMap` that associates each `K` with +/// a `Vec`. +fn to_hashmap(to_assign: Vec<(V, K)>) -> HashMap> +where + K: Hash + Eq, + V: Ord, +{ + let mut map = HashMap::new(); - for (p, group) in to_assign { - let inner = group_package_map.entry(group).or_insert(vec![]); - inner.push(p); + for (value, key) in to_assign { + let inner = map.entry(key).or_insert(vec![]); + inner.push(value); } - for vecs in group_package_map.values_mut() { + for vecs in map.values_mut() { vecs.sort(); } - group_package_map + map }