Skip to main content

run_module

Macro run_module 

Source
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,
}