Пользовательская функция javascript в rust

Как объявить пользовательскую (не встроенную) функцию javascript в rust?

Простой пример со страницы https://rustwasm.github.io/book/game-of-life/hello-world.html работает. Теперь стоит задача вместо встроенной в javascript функции alert использовать свою функцию. Как это сделать? Чтоб, например, в этом месте вместо alert поставить какую-нибудь my_fun1():

 #[wasm_bindgen]
    extern {
        fn alert(s: &str);
    }
    
    #[wasm_bindgen]
    pub fn greet() {
        alert("Hello, wasm-game-of-life!");
    } 

---- например в таком виде:

#[wasm_bindgen]
extern {
    fn fun1(s: &str);
}

#[wasm_bindgen]
pub fn myfunrust() {
    fun1("Hello, my fun from rust!");
} 

Ответы (1 шт):

Автор решения: koinik

В примерах на wasm-bindgen/examples нашел решение: (https://github.com/rustwasm/wasm-bindgen/blob/master/examples/import_js/crate/src/lib.rs)

use wasm_bindgen::prelude::*;

#[wasm_bindgen(module = "/defined-in-js.js")]
extern "C" {
    fn name() -> String;

    type MyClass;

    #[wasm_bindgen(constructor)]
    fn new() -> MyClass;

    #[wasm_bindgen(method, getter)]
    fn number(this: &MyClass) -> u32;
    #[wasm_bindgen(method, setter)]
    fn set_number(this: &MyClass, number: u32) -> MyClass;
    #[wasm_bindgen(method)]
    fn render(this: &MyClass) -> String;
}

// lifted from the `console_log` example
#[wasm_bindgen]
extern "C" {
    #[wasm_bindgen(js_namespace = console)]
    fn log(s: &str);
}

#[wasm_bindgen(start)]
pub fn run() {
    log(&format!("Hello from {}!", name())); // should output "Hello from Rust!"

    let x = MyClass::new();
    assert_eq!(x.number(), 42);
    x.set_number(10);
    log(&x.render());
}
→ Ссылка