macro_rules! run_module {
(
bootstrap: $bootstrap:expr,
module_name: $module_name:expr,
module: $module:expr,
module_type: $module_type:ty,
db: $db:expr,
) => { ... };
(
bootstrap: $bootstrap:expr,
module_name: $module_name:expr,
module_type: $module_type:ty,
cli_type: $cli_type:ty,
db: $db:expr,
setup: $setup:expr,
event_types: $event_types:expr,
) => { ... };
(
bootstrap: $bootstrap:expr,
module_name: $module_name:expr,
module_type: $module_type:ty,
cli_type: $cli_type:ty,
db: $db:expr,
setup: $setup:expr,
event_types: $event_types:expr,
on_event: $on_event:expr,
) => { ... };
(
socket_path: $socket_path:expr,
module_id: $module_id:expr,
module_name: $module_name:expr,
version: $version:expr,
module_type: $module_type:ty,
cli_type: $cli_type:ty,
db: $db:expr,
setup: $setup:expr,
event_types: $event_types:expr,
on_event: $on_event:expr,
data_dir: $data_dir:expr,
) => { ... };
(
socket_path: $socket_path:expr,
module_id: $module_id:expr,
module_name: $module_name:expr,
version: $version:expr,
cli: $cli:expr,
cli_type: $cli_type:ty,
module_type: $module_type:ty,
module: $module:expr,
db: $db:expr,
) => { ... };
(
bootstrap: $bootstrap:expr,
module_name: $module_name:expr,
module: $module:expr,
module_type: $module_type:ty,
db: $db:expr,
on_connect: $on_connect:expr,
on_tick: $on_tick:expr,
) => { ... };
(
socket_path: $socket_path:expr,
module_id: $module_id:expr,
module_name: $module_name:expr,
version: $version:expr,
cli: $cli:expr,
cli_type: $cli_type:ty,
module_type: $module_type:ty,
module: $module:expr,
db: $db:expr,
on_connect: $on_connect:expr,
on_tick: $on_tick:expr,
) => { ... };
}Expand description
Run a module with automatic connect, CLI/RPC/event registration, and dispatch.
Replaces manual main-loop boilerplate. CLI spec, RPC methods, and event types are auto-discovered from #[command], #[rpc_methods], and #[event_handlers]. On unload (invocation channel closed), the module exits cleanly.
§Example (unified module — preferred)
ⓘ
let bootstrap = ModuleBootstrap::from_env()?;
run_module! {
bootstrap: &bootstrap,
module_name: "demo",
module: DemoModule { config },
module_type: DemoModule,
db,
}§Example (explicit args — legacy)
ⓘ
run_module! {
socket_path: args.socket_path.clone(),
module_id: &args.module_id,
module_name: "demo-module",
version: env!("CARGO_PKG_VERSION"),
cli: DemoCli,
cli_type: DemoCli,
module_type: DemoModule,
module: DemoModule { config: config.clone() },
db,
}