use farmfe_core::{
module::{module_group::ModuleGroupId, Module, ModuleId},
HashSet,
};
#[derive(Debug)]
pub struct ModuleBucket {
pub id: String,
pub size: usize,
modules: HashSet<ModuleId>,
module_groups: HashSet<ModuleGroupId>,
}
impl ModuleBucket {
pub fn new(id: String, module: &Module) -> Self {
Self {
id,
modules: HashSet::from_iter([module.id.clone()]),
module_groups: module.module_groups.clone(),
size: module.size,
}
}
pub fn id(module: &Module) -> String {
let mut group_key = module
.module_groups
.iter()
.map(|module_group_id| module_group_id.to_string())
.collect::<Vec<String>>();
group_key.sort();
let key = group_key.join("_");
format!(
"{}_{}_{}",
module.module_type.to_string(),
module.immutable,
key
)
}
pub fn modules(&self) -> &HashSet<ModuleId> {
&self.modules
}
pub fn module_groups(&self) -> &HashSet<ModuleGroupId> {
&self.module_groups
}
pub fn add_module(&mut self, module: &Module) {
let module_id = module.id.clone();
let size = module.size;
self.size += size;
self.modules.insert(module_id);
}
}