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
来处理它。