Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

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 を追加すべきだとわかる。