use std::collections::{HashMap, HashSet};
use crate::{kerman::KernelInfo, modinfo};
pub struct KModuleTree {
kernel: KernelInfo,
}
impl KModuleTree {
pub fn get_loaded_modules(&self) -> Vec<String> {
modinfo::lsmod()
.iter()
.map(|modinfo| modinfo.name.to_owned())
.collect()
}
#[allow(dead_code)]
pub fn get_loaded_deps(&self) -> HashMap<String, Vec<String>> {
self.get_specified_deps(&self.get_loaded_modules())
}
pub fn get_specified_deps(&self, modules: &[String]) -> HashMap<String, Vec<String>> {
match modules.is_empty() {
true => return self.kernel.get_deps_for(&self.get_loaded_modules()),
false => (),
}
self.kernel.get_deps_for(modules)
}
#[allow(dead_code)]
pub fn merge_loaded_deps(&self) -> HashSet<String> {
self.merge_specified_deps(&self.get_loaded_modules())
}
pub fn merge_specified_deps(&self, modules: &[String]) -> HashSet<String> {
let mut deps = HashSet::default();
for (module, data) in self.get_specified_deps(modules) {
deps.extend(data);
deps.insert(module);
}
deps
}
}