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
來使用它。