Type Translations - The `wasm-bindgen` Guide

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Type Translations in `web-sys`

Most of the types specified in WebIDL (the interface definition language for all Web APIs) have relatively straightforward translations into `web-sys`, but it's worth calling out a few in particular:

- `BufferSource` and `ArrayBufferView` - these two types show up in a number of APIs that generally deal with a buffer of bytes. We bind them in `web-sys` with two different types, `js_sys::Object` and `&mut [u8]`. Using `js_sys::Object` allows passing in arbitrary JS values which represent a view of bytes (like any typed array object), and `&mut [u8]` allows using a raw slice in Rust. Unfortunately we must pessimistically assume that JS will modify all slices as we don't currently have information of whether they're modified or not.

- Callbacks are all represented as `js_sys::Function`. This means that all callbacks going through `web-sys` are a raw JS value. You can work with this by either juggling actual `js_sys::Function` instances or you can create a `Closure<dyn FnMut(...)>`, extract the underlying `JsValue` with `as_ref`, and then use `JsCast::unchecked_ref` to convert it to a `js_sys::Function`.