macro_rules! mf_extension {
(
$name:ident
$(, ops = [ $( $op:ident ),+ $(,)? ] )?
$(, plugins = [ $( $plugin:expr ),+ $(,)? ] )?
$(, global_attributes = [ $( $attr:expr ),+ $(,)? ] )?
$(, node_transform = $node_transform_fn:expr )?
$(, docs = $docs:expr )?
$(,)?
) => { ... };
}Expand description
定义具有声明式语法的 ModuForge 扩展,类似于 Deno 的 extension! 宏。 此宏创建结构体和扩展的相关初始化方法。
§示例
use mf_macro::mf_extension;
use mf_core::types::GlobalAttributeItem;
use std::sync::Arc;
// 定义操作函数
fn setup_logging(_manager: &mf_state::ops::GlobalResourceManager) -> mf_core::ForgeResult<()> {
println!("日志系统初始化");
Ok(())
}
fn cleanup_resources(_manager: &mf_state::ops::GlobalResourceManager) -> mf_core::ForgeResult<()> {
println!("资源清理完成");
Ok(())
}
// 定义节点转换函数
fn node_transformer(node: &mf_core::node::Node) -> Option<mf_core::node::Node> {
// 对特定节点类型进行二次修改
if node.name() == "paragraph" {
let mut new_node = node.clone();
// 添加默认样式或属性
new_node.add_attribute("class", "enhanced-paragraph");
Some(new_node)
} else {
Some(node.clone()) // 其他节点保持不变
}
}
// 创建包含操作和节点禁用的扩展
mf_extension!(
logging_extension,
ops = [ setup_logging, cleanup_resources ],
node_transform = node_transformer,
docs = "用于日志记录、资源管理和节点转换的扩展"
);
// 使用方法
let ext = logging_extension::init();§可用选项:
ops: 操作函数列表,函数签名为fn(&GlobalResourceManager) -> ForgeResult<()>plugins: 要包含的插件实例列表global_attributes: 全局属性项列表node_transform: 节点转换函数,签名为fn(&Node) -> Option<Node>docs: 扩展的文档字符串