【发布时间】:2019-11-09 10:51:58
【问题描述】:
我想要一个 WebAssembly 函数(从 Rust 编译),它将 JavaScript Buffer 作为参数并将数据写入缓冲区。然后我希望能够使用这个缓冲区并与来自 JavaScript 上下文的数据进行交互。
我正在使用 wasm-bindgen 将 WebAssembly 结构导出到 JavaScript,但我不知道如何在 WebAssembly 中使用 JavaScript Buffer。
这是我希望 Rust 源代码看起来像的简化版本:
struct Element {
a: u8,
b: String,
}
impl Element {
fn new(a: u8, b: &str) -> Element {
Element {
a: a,
b: String::from(b),
}
}
fn copy_into(&self, buffer: Buffer) {
let mut offset = 0;
buffer[offset] = self.a;
offset += std::mem::size_of::<u8>();
buffer[offset] = self.b;
}
}
这就是我想在 JavaScript 上下文中做的事情:
// Code for importing Element and instantiating the wasm module omitted.
let element = new Element(1, 'abc');
let buffer = Buffer.allocUnsafe(4);
element.copy_into(buffer);
console.log(buffer.toString('hex'));
我希望上述代码末尾的console.log 将“01616263”打印到控制台。我想实现这一点,而不必在 WebAssembly 中分配新内存并复制内容。相反,我想直接写入 JavaScript 内存,其中buffer 是指向该内存的指针。
我怎样才能通过某种方式将Buffer 导入Rust 来实现这一点?
【问题讨论】:
标签: javascript rust webassembly