use crate::{
BoxFuture, ControllerDefinition, MessagePatternDefinition, Middleware, MiddlewareConsumer,
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 forward_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 route_prefix(&self) -> Option<&str> {
None
}
fn middleware(&self) -> Vec<Arc<dyn Middleware>> {
Vec::new()
}
fn configure(&self, _consumer: &mut MiddlewareConsumer, _module_ref: &ModuleRef) -> Result<()> {
Ok(())
}
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_module_destroy(
&self,
_module_ref: ModuleRef,
_signal: Option<String>,
) -> BoxFuture<'static, Result<()>> {
Box::pin(async { Ok(()) })
}
fn before_application_shutdown(
&self,
_module_ref: ModuleRef,
_signal: Option<String>,
) -> BoxFuture<'static, Result<()>> {
Box::pin(async { Ok(()) })
}
fn on_application_shutdown(&self, _module_ref: ModuleRef) -> BoxFuture<'static, Result<()>> {
Box::pin(async { Ok(()) })
}
fn on_application_shutdown_with_signal(
&self,
module_ref: ModuleRef,
_signal: Option<String>,
) -> BoxFuture<'static, Result<()>> {
self.on_application_shutdown(module_ref)
}
}