Skip to main content

mf_plugin

Macro mf_plugin 

Source
macro_rules! mf_plugin {
    (
        $name:ident
        $(, metadata = $metadata:expr)?
        $(, config = $config:expr)?
        $(, append_transaction = $append_fn:expr)?
        $(, filter_transaction = $filter_fn:expr)?
        $(, state_field = $state_field:expr)?
        $(, docs = $docs:expr)?
        $(,)?
    ) => { ... };
}
Expand description

定义具有声明式语法的 ModuForge 插件,类似于 extension! 宏的设计

§示例

use mf_macro::{mf_plugin, mf_plugin_metadata, mf_plugin_config};
use mf_state::{Transaction, State, plugin::PluginMetadata, plugin::PluginConfig};
use mf_state::error::StateResult;

// 定义事务处理函数
async fn validate_transaction(
    _trs: &[Transaction],
    _old_state: &State,
    _new_state: &State,
) -> StateResult<Option<Transaction>> {
    println!("验证事务");
    Ok(None)
}

async fn filter_transaction(tr: &Transaction, _state: &State) -> bool {
    // 简单的过滤逻辑
    true
}

// 使用声明式语法创建插件
mf_plugin!(
    validation_plugin,
    metadata = mf_plugin_metadata!(
        "validation_plugin",
        version = "1.0.0",
        description = "事务验证插件",
        author = "ModuForge Team",
        tags = ["validation", "security"]
    ),
    config = mf_plugin_config!(
        enabled = true,
        priority = 10,
        settings = { "strict_mode" => true, "timeout" => 5000 }
    ),
    append_transaction = validate_transaction,
    filter_transaction = filter_transaction,
    docs = "用于事务验证和安全检查的插件"
);

// 使用方法
let plugin = validation_plugin::new();
let spec = validation_plugin::spec();