Skip to main content

define_hook

Macro define_hook 

Source
macro_rules! define_hook {
    (
        $(#[$meta:meta])*
        $name:ident, $hook_name:literal => {
            payload: $payload:ty,
            result: $result:ty $(,)?
        }
    ) => { ... };
}
Expand description

Generates a hook type definition and marker struct.

§Usage

define_hook! {
    /// Doc comment for the hook.
    MyHook, "my_hook" => {
        payload: MyPayload,
        result: PluginResult<MyPayload>,
    }
}

This generates a marker struct MyHook implementing HookTypeDef. Plugins handle it by implementing HookHandler<MyHook>.

§CMF Pattern (one handler, multiple hook names)

For CMF hooks where one handler covers multiple hook names:

define_hook! {
    /// CMF message evaluation hook.
    CmfHook, "cmf" => {
        payload: MessagePayload,
        result: PluginResult<MessagePayload>,
    }
}

// Register the same handler for multiple names:
// manager.register_handler_for_names::<CmfHook, _>(plugin, config, &[
//     "cmf.tool_pre_invoke", "cmf.llm_input", ...
// ]);