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();