web-sys 中的类型转换

WebIDL (所有 Web API 的接口定义语言) 中指定的大多数类型都相对简单地转换为 web-sys,但值得特别指出一些类型

  • BufferSourceArrayBufferView - 这两种类型出现在许多通常处理字节缓冲区的 API 中。我们在 web-sys 中使用两种不同的类型 js_sys::Object&mut [u8] 来绑定它们。使用 js_sys::Object 允许传入表示字节视图的任意 JS 值(如任何类型化数组对象),而 &mut [u8] 允许使用 Rust 中的原始切片。不幸的是,我们必须悲观地假设 JS 将修改所有切片,因为我们目前没有关于它们是否被修改的信息。

  • 回调都表示为 js_sys::Function。这意味着所有通过 web-sys 的回调都是原始的 JS 值。您可以通过操作实际的 js_sys::Function 实例或者创建 Closure<dyn FnMut(...)>,使用 as_ref 提取底层的 JsValue,然后使用 JsCast::unchecked_ref 将其转换为 js_sys::Function 来处理它。