use std::collections::HashSet; use std::fs::File; use std::hash::Hash; use std::io::{BufRead, BufReader}; use std::path::PathBuf; use crate::Package; pub const GROUPS_DIR: &str = "/home/ratajc72/.config/pacdef/groups"; #[derive(Debug)] pub struct Group { pub name: String, pub packages: HashSet, } impl Group { pub fn load_from_dir() -> HashSet { let mut result = HashSet::new(); let path = PathBuf::from(GROUPS_DIR); for entry in path.read_dir().unwrap() { let file = entry.unwrap(); let name = file.file_name(); let f = File::open(file.path()).unwrap(); let reader = BufReader::new(f); let packages = Package::from_lines(reader.lines()); result.insert(Group { name: name.into_string().unwrap(), packages, }); } result } } impl PartialOrd for Group { fn partial_cmp(&self, other: &Self) -> Option { match self.name.partial_cmp(&other.name) { Some(core::cmp::Ordering::Equal) => None, ord => ord, } } } impl Ord for Group { fn cmp(&self, other: &Self) -> std::cmp::Ordering { self.name.cmp(&other.name) } } impl Hash for Group { fn hash(&self, state: &mut H) { self.name.hash(state); } } impl PartialEq for Group { fn eq(&self, other: &Self) -> bool { self.name == other.name && self.packages == other.packages } } impl Eq for Group { fn assert_receiver_is_total_eq(&self) {} }