Rust の WebAssembly(wasm) の web-sys を使うときは Cargo.toml で features を指定する必要あり
Rust で WebAssembly しようとやってみたら最初でつまづいたのでメモ。
Cargo.toml
[dependencies] web-sys = "0.3.57"
main.rs (trunk 使ってみてるので)
pub func main() { let window = web_sys::window().unwrap(); }
error[E0425]: cannot find function `window` in crate `web_sys` --> src/main.rs:6:27 | 6 | let window = web_sys::window().unwrap(); | ^^^^^^ not found in `web_sys`
どうやら web-sys は膨大な内容を取り扱っているのと、最終成果物の WebAssembly のバイナリをできる限り小さくするために、デフォルトで全部機能をオフにしているらしい。
なので、使うものだけを Cargo の features に列挙していく必要がある。
Cargo.toml
[dependencies.web-sys] version = "0.3.57" features = [ 'Window' ]
https://rustwasm.github.io/wasm-bindgen/api/web_sys/
↑ここの Structs からそれっぽいやつを見つけて、詳細ページを見に行くと追加すべき features が書いてあるのでそれを Cargo.toml に追加する。
たとえば window.document() とつなげたければ Struct web_sys::Document を見に行って Document を追加すべきだとわかる。