Skip to main content

rspack_core/dependency/
module_dependency.rs

1use dyn_clone::clone_trait_object;
2use rspack_cacheable::cacheable_dyn;
3
4use super::{Dependency, FactorizeInfo};
5use crate::DependencyCondition;
6
7#[cacheable_dyn]
8pub trait ModuleDependency: Dependency {
9  fn request(&self) -> &str;
10
11  fn user_request(&self) -> &str {
12    self.request()
13  }
14
15  fn weak(&self) -> bool {
16    self.lazy().is_some()
17  }
18
19  fn get_optional(&self) -> bool {
20    false
21  }
22
23  fn get_condition(&self) -> Option<DependencyCondition> {
24    None
25  }
26
27  fn factorize_info(&self) -> &FactorizeInfo;
28  fn factorize_info_mut(&mut self) -> &mut FactorizeInfo;
29}
30
31clone_trait_object!(ModuleDependency);
32
33pub trait AsModuleDependency {
34  fn as_module_dependency(&self) -> Option<&dyn ModuleDependency> {
35    None
36  }
37
38  fn as_module_dependency_mut(&mut self) -> Option<&mut dyn ModuleDependency> {
39    None
40  }
41}
42
43impl<T: ModuleDependency> AsModuleDependency for T {
44  fn as_module_dependency(&self) -> Option<&dyn ModuleDependency> {
45    Some(self)
46  }
47
48  fn as_module_dependency_mut(&mut self) -> Option<&mut dyn ModuleDependency> {
49    Some(self)
50  }
51}
52
53pub type BoxModuleDependency = Box<dyn ModuleDependency>;