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