web-sys
概述
web-sys
crate 具有以下文件和目录布局
.
├── build.rs
├── Cargo.toml
├── README.md
├── src
│ └── lib.rs
└── webidls
└── enabled
└── ...
webidls/enabled/*.webidl
这些是我们将实际为其生成绑定的 WebIDL 接口(或者至少为这些文件中定义的某些内容生成绑定)。
build.rs
build.rs
在 webidls/enabled
中的所有 WebIDL 文件上调用 wasm-bindgen
的 WebIDL 前端。它将生成的绑定写入 cargo 构建的输出目录。
src/lib.rs
src/lib.rs
唯一做的事情是在编译时将 build.rs
中生成的绑定包含进来。以下是整个 src/lib.rs
文件
# #![allow(unused_variables)] #fn main() { //! Raw API bindings for Web APIs //! //! This is a procedurally generated crate from browser WebIDL which provides a //! binding to all APIs that browsers provide on the web. //! //! This crate by default contains very little when compiled as almost all of //! its exposed APIs are gated by Cargo features. The exhaustive list of //! features can be found in `crates/web-sys/Cargo.toml`, but the rule of thumb //! for `web-sys` is that each type has its own cargo feature (named after the //! type). Using an API requires enabling the features for all types used in the //! API, and APIs should mention in the documentation what features they //! require. #![doc(html_root_url = "https://docs.rs/web-sys/0.3")] #![allow(deprecated)] mod features; pub use features::*; pub use js_sys; pub use wasm_bindgen; /// Getter for the `Window` object /// /// [MDN Documentation] /// /// *This API requires the following crate features to be activated: `Window`* /// /// [MDN Documentation]: https://mdn.org.cn/en-US/docs/Web/API/Window #[cfg(feature = "Window")] pub fn window() -> Option<Window> { use wasm_bindgen::JsCast; js_sys::global().dyn_into::<Window>().ok() } #}
Cargo 特性
编译时,crate 默认情况下几乎是空的,这可能不是你想要的!由于 API 数量众多,此 crate 使用特性来启用其 API 的部分内容,以减少编译时间。Cargo.toml
中的特性列表都对应于生成的函数中的类型。启用特性会启用该类型。所有方法都应指示需要激活哪些特性才能使用该方法。