如何将宏属性应用于单独模块中定义的函数?

时间:2018-11-18 18:11:06

标签: rust rust-macros wasm-bindgen

我对通过wasm-bindgen使用rust-webpack-template来将Rust代码编译为WebAssembly感兴趣。但是,我想避免直接用#[wasm_bindgen]属性宏直接包装我的代码,以便可以从生成的WebAssembly接口中分离出函数逻辑,以更好地组织我的项目。相反,我希望绑定生成在单独的文件中,例如:

mod my_code;
use my_code::my_function;

#[wasm_bindgen]
my_function; // I want to do something like this!

我知道#[wasm_bindgen]是一个宏属性,它通常在随后的函数定义的AST上运行,但是有没有一种方法可以将该宏应用于其他地方定义的代码?

1 个答案:

答案 0 :(得分:1)

据我所知,没有办法做到这一点。宏对附加的代码进行AST操作,此处没有附加的代码。

如果您确实需要此功能,则必须复制并粘贴函数的签名:

mod my_code {
    pub fn my_function(_: i32) -> String {
        unimplemented!()
    }
}

#[wasm_bindgen]
fn my_function(a: i32) -> String {
    my_code::my_function(a)
}

有可能您可以编写一个宏来使包装稍显乏味,但是您仍然需要复制函数名称,参数类型和返回类型。