Расширить структуру web-sys в wasm-bindgen? (В частности, AudioWorkletProcessor в Rust)

Документы о том, как использовать существующие веб-системы javascript в rust -> wasmпоток с использованием wasm-bindgen довольно прост. Коротко:

  1. Перечислите необходимые функции как зависимости
// cargo.toml

...omitted...

[dependencies.web-sys]
version = "0.3.4"
features = [
  'AudioContext',
  'OscillatorNode'
]
  1. Доступ через web_sys и оттуда относитесь к ним как к обычному.
// lib.rs

...omitted...

#[wasm_bindgen]
impl FmOsc {
    #[wasm_bindgen(constructor)]
    pub fn new() -> Result<FmOsc, JsValue> {
        let ctx = web_sys::AudioContext::new()?;
        let primary = ctx.create_oscillator()?;
        let fm_osc = ctx.create_oscillator()?;
    
...omitted...

Ссылка на полный пример: https://rustwasm.github.io/docs/wasm-bindgen/examples/web-audio.html


Хотя этот подход работает для большинства веб-систем, он не так прост для тех, которые требуют от вас расширения класса. В этом случае я пытаюсь использовать AudioWorkletProccessor из wasm-bindgen

При стандартном использовании вы должны расширить AudioWorkletProcessorclass, затем зарегистрируйте его. Пример Mdn: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Using_AudioWorklet#Basic_code_framework


Как я могу подойти к этой проблеме? Сначала мне нужно продлить AudioWorkletProcessor в Rust (который не выполняет обычные классы и наследование), переопределив его process()функция. Тогда мне нужно убедиться registerProcessor() впрыскивается в мое пространство ржавчины.


РЕДАКТИРОВАТЬ: https://rustwasm.github.io/docs/wasm-bindgen/reference/attributes/on-js-imports/extends.html

1 ответ

Решение

Вам нужно будет сделать это на стороне JavaScript. wasm-bindgenне поддерживает расширение импортированных классов и их повторный экспорт в JavaScript; тем не менее, они действительно хотят поддержать его в конечном итоге, и существует проблема для его отслеживания и связанный с ним RFC.

Другие вопросы по тегам