1

我有兴趣使用wasm-bindgenviarust-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 上运行,但是有没有一种方法可以将该宏应用于其他地方定义的代码?

4

1 回答 1

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)
}

您可以编写一个宏来使包装稍微不那么乏味,但您仍然需要复制函数名称、参数类型和返回类型。

于 2018-11-27T20:14:33.383 回答