我正在通过本教程学习如何使用 Rust 定位 WASM 。我希望能够将我的域代码与将其公开给 WASM 的代码分开。这样,我可以在非 WASM 应用程序中重用域代码,而不会大惊小怪。我找不到任何这样做的例子,我不知道它是否受支持。
现在,我正在做的是用另一个结构包装我的 vanilla Rust 结构,该结构具有围绕域类的公共方法的包装器。我几乎可以肯定这不是正确的方法,但它现在有效。
我希望能够绑定CellValue
到 WASM。
// Inside a vanilla Rust library
// We could bind CellValue with #[wasm_bindgen],
// but I want to keep all WASM stuff out of this library
enum CellValue {
Live = 0,
Dead = 1
}
// ...
struct World {
// ...
cells: Vec<CellValue> // need to bind a direct reference to the values in here
}
这就是我World
向 WASM 公开的方式——我将它包装起来GOL
并实现方法,GOL
以便 WASM 可以与World
.
// Inside the wasm binding library
#[wasm_bindgen]
pub struct GOL {
world: gol::World
}
#[wasm_bindgen]
impl GOL {
pub fn make_new(rows: usize, cols: usize) -> Self
{
Self {
world: GameOfLife::make_new(rows, cols)
}
}
// and so on...
}
对于CellValue
,我无法模仿我采用的方法,GOL
因为我需要能够引用 . 持有的每个单元格内的数据World
。
就像我说的,我跳过这些障碍的全部原因是为了避免在我的域代码中添加#[wasm_bindgen]
. 甚至有可能获得这种绑定吗?