mkdir src && mv src-lib.rs src/lib.rs
npm i
npm run serve
open localhost:8080
(async () => {
const demo = await import('./pkg').catch(console.error);
const div = document.createElement("div");
div.id = 'name'
document.body.appendChild(div);
demo.greet('Hello World One', document.getElementById('name'));
})();
#[wasm_bindgen]
pub fn greet(message: &str, div: HtmlDivElement) {
div.set_inner_text(message);
}
(async () => {
const demo = await import('./pkg').catch(console.error);
const div = document.createElement("div");
div.id = 'name'
document.body.appendChild(div);
demo.greetWithOptions({
message: 'Hello World Two',
div: document.getElementById('name')
});
})();
struct Options<'a> {
message: &'a str,
div: &'a HtmlDivElement,
}
#[wasm_bindgen(js_name = greetWithOptions)]
pub fn greet_with_options(options: &Options) {
let div = options.div;
let message = options.message;
div.set_inner_text(message);
}
demo.greet(document.getElementById('name'));
demo.greet(document.getElementById('name'), { message: 'Hi World!' });
# [wasm_bindgen]
pub fn greet(ele: &JsValue, options: &JsValue) -> Result<(), JsValue> {
match ele.dyn_ref::<HtmlDivElement>() {
Some(div) => {
if (options.is_undefined()) {
div.set_inner_text("Hello from Rust");
} else {
let message: JsValue = Reflect::get(&options, &JsValue::from_str("message"))?;
let message = message.as_string().unwrap();
div.set_inner_text(&message);
}
Ok(())
}
None => Err(JsValue::from_str("ele must be a div"))
}
}