Я хочу иметь функцию WebAssembly (скомпилированную из Rust), которая принимает JavaScript Buffer
в качестве аргумента и записывает данные в буфер. Затем я хочу иметь возможность использовать этот буфер и взаимодействовать с данными из контекста JavaScript.
Я использую wasm-bindgen для экспорта структур WebAssembly в JavaScript, но я не знаю, как я могу использовать JavaScript Buffer
внутри WebAssembly.
Это упрощенная версия того, что я хочу, чтобы исходный код 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?