rspack_core/dependency/
module_dependency.rs1use 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>;