1use crate::{
2 BoxFuture, ControllerDefinition, MessagePatternDefinition, Middleware, ModuleRef,
3 ProviderDefinition, ProviderToken, Result, RouteDefinition, WebSocketGatewayDefinition,
4};
5use std::sync::Arc;
6
7mod dynamic;
8
9pub use dynamic::DynamicModule;
10
11pub trait Module: Send + Sync + 'static {
16 fn name(&self) -> &'static str;
18
19 fn imports(&self) -> Vec<Arc<dyn Module>> {
21 Vec::new()
22 }
23
24 fn providers(&self) -> Result<Vec<ProviderDefinition>> {
26 Ok(Vec::new())
27 }
28
29 fn exports(&self) -> Result<Vec<ProviderToken>> {
31 Ok(Vec::new())
32 }
33
34 fn is_global(&self) -> bool {
36 false
37 }
38
39 fn middleware(&self) -> Vec<Arc<dyn Middleware>> {
41 Vec::new()
42 }
43
44 fn controllers(&self, _module_ref: &ModuleRef) -> Result<Vec<ControllerDefinition>> {
46 Ok(Vec::new())
47 }
48
49 fn routes(&self) -> Result<Vec<RouteDefinition>> {
51 Ok(Vec::new())
52 }
53
54 fn gateways(&self, _module_ref: &ModuleRef) -> Result<Vec<WebSocketGatewayDefinition>> {
56 Ok(Vec::new())
57 }
58
59 fn message_patterns(&self, _module_ref: &ModuleRef) -> Result<Vec<MessagePatternDefinition>> {
61 Ok(Vec::new())
62 }
63
64 fn on_module_init(&self, _module_ref: &ModuleRef) -> Result<()> {
66 Ok(())
67 }
68
69 fn on_application_bootstrap(&self, _module_ref: ModuleRef) -> BoxFuture<'static, Result<()>> {
71 Box::pin(async { Ok(()) })
72 }
73
74 fn on_application_shutdown(&self, _module_ref: ModuleRef) -> BoxFuture<'static, Result<()>> {
76 Box::pin(async { Ok(()) })
77 }
78}