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