Skip to main content

mf_extension

Macro mf_extension 

Source
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: 扩展的文档字符串