use crate::{
BoxFuture, ControllerDefinition, MessagePatternDefinition, Middleware, ModuleRef,
ProviderDefinition, ProviderToken, Result, RouteDefinition, WebSocketGatewayDefinition,
};
use std::sync::Arc;
mod dynamic;
pub use dynamic::DynamicModule;
pub trait Module: Send + Sync + 'static {
fn name(&self) -> &'static str;
fn imports(&self) -> Vec<Arc<dyn Module>> {
Vec::new()
}
fn providers(&self) -> Result<Vec<ProviderDefinition>> {
Ok(Vec::new())
}
fn exports(&self) -> Result<Vec<ProviderToken>> {
Ok(Vec::new())
}
fn is_global(&self) -> bool {
false
}
fn middleware(&self) -> Vec<Arc<dyn Middleware>> {
Vec::new()
}
fn controllers(&self, _module_ref: &ModuleRef) -> Result<Vec<ControllerDefinition>> {
Ok(Vec::new())
}
fn routes(&self) -> Result<Vec<RouteDefinition>> {
Ok(Vec::new())
}
fn gateways(&self, _module_ref: &ModuleRef) -> Result<Vec<WebSocketGatewayDefinition>> {
Ok(Vec::new())
}
fn message_patterns(&self, _module_ref: &ModuleRef) -> Result<Vec<MessagePatternDefinition>> {
Ok(Vec::new())
}
fn on_module_init(&self, _module_ref: &ModuleRef) -> Result<()> {
Ok(())
}
fn on_application_bootstrap(&self, _module_ref: ModuleRef) -> BoxFuture<'static, Result<()>> {
Box::pin(async { Ok(()) })
}
fn on_application_shutdown(&self, _module_ref: ModuleRef) -> BoxFuture<'static, Result<()>> {
Box::pin(async { Ok(()) })
}
}