use crate::{DynProvider, Type};
pub trait Module {
fn eager_create() -> bool {
false
}
fn submodules() -> Option<Vec<ResolveModule>> {
None
}
fn providers() -> Vec<DynProvider>;
}
pub struct ResolveModule {
ty: Type,
eager_create: bool,
submodules: Option<Vec<ResolveModule>>,
providers: Vec<DynProvider>,
}
impl ResolveModule {
pub fn new<T: Module + 'static>() -> Self {
Self {
ty: Type::new::<T>(),
eager_create: T::eager_create(),
submodules: T::submodules(),
providers: T::providers(),
}
}
pub fn ty(&self) -> Type {
self.ty
}
pub fn eager_create(&self) -> bool {
self.eager_create
}
pub(crate) fn submodules(&mut self) -> Option<Vec<ResolveModule>> {
self.submodules.take()
}
pub(crate) fn providers(self) -> Vec<DynProvider> {
self.providers
}
}