Требуется буфер аргументов, который ссылается на буфер памяти текущего экземпляра wasm.
Прежде всего, стоит отметить, что это не обязательно так. Эта привязка предназначена для стандартного JavaScript API - Uint8Array
- который позволяет создавать байтовые массивы из произвольных буферов или емкости.
Вам не нужен этот конструктор, если вы просто хотите передать представление байтового массива в память Rust или вернуть байты в памяти Rust в JavaScript - для этого вместо этого используйте стандартные возможности wasm-bindgen
и передайте / верните &[u8]
или Vec<u8>
, как в случае с обычный код Rust.
Однако, чтобы ответить на вашу вторую часть вопроса на всякий случай
Как получить доступ к такому объекту со стороны Rust? (компилируется в wasm)
Со стороны Rust вы можете использовать wasm_bindgen::memory
, что даст вам экземпляр памяти. По умолчанию он возвращает его как шаблон c JsValue
, но вы можете преобразовать его в WebAssembly.Memory
, используя .unchecked_into::<js_sys::WebAssembly::Memory>()
, что, в свою очередь, позволит вам получить доступ к свойству buffer
вам это нужно.
Обратите внимание, что создание кратковременных Uint8Array
представлений в Rust памяти, как это, также реализовано во встроенном API js_sys::Uint8Array::view
, но оно помечено unsafe
по уважительной причине: buffer
может быть признано недействительным при любом выделении, которое вызывается множеством встроенных API-интерфейсов, поэтому вам нужно очень осторожно обращаться с такими представлениями и убедиться, что они используются сразу после создания. Лучший способ избежать проблем, опять же, вообще не полагаться на такой низкоуровневый доступ, а вместо этого использовать #[wasm_bindgen]
для генерации любых привязок.