web-sys
中的类型转换
大多数在 WebIDL(所有 Web API 的接口定义语言) 中指定的类型在 web-sys
中都有相对简单的转换,但值得特别指出一些。
-
BufferSource
和ArrayBufferView
- 这两种类型出现在许多通常处理字节缓冲区的 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
。