JsValue - The wasm-bindgen
Guide (original ) (raw )
Introduction
1. Examples
1.1. Hello, World!
1.2. Using console.log
1.3. Small Wasm files
1.4. Without a Bundler
1.5. Synchronous Instantiation
1.6. Importing functions from JS
1.7. Working with char
1.8. js-sys: WebAssembly in WebAssembly
1.9. web-sys: DOM hello world
1.10. web-sys: Closures
1.11. web-sys: performance.now
1.12. web-sys: using fetch
1.13. web-sys: Weather report
1.14. web-sys: canvas hello world
1.15. web-sys: canvas Julia set
1.16. web-sys: WebAudio
1.17. web-sys: WebGL
1.18. web-sys: WebSockets
1.19. web-sys: WebRTC DataChannel
1.20. web-sys: requestAnimationFrame
1.21. web-sys: A Simple Paint Program
1.22. web-sys: Wasm in Web Worker
1.23. Parallel Raytracing
1.24. Wasm Audio Worklet
1.25. web-sys: A TODO MVC App
2. Reference
2.1. Deployment
2.2. JS snippets
2.3. Static JS Objects
2.4. Passing Rust Closures to JS
2.5. Receiving JS Closures in Rust
2.6. Promises and Futures
2.7. Iterating over JS Values
2.8. Arbitrary Data with Serde
2.9. Accessing Properties of Untyped JS Values
2.10. Working with Duck-Typed Interfaces
2.11. Command Line Interface
2.12. Optimizing for Size
2.13. Supported Rust Targets
2.14. Supported Browsers
2.15. Support for Weak References
2.16. Support for Reference Types
2.17. Supported Types
2.17.1. Imported JavaScript Types
2.17.2. Exported Rust Types
2.17.3. JsValue
2.17.4. Box<[T]> and Vec
2.17.5. *const T and *mut T
2.17.6. NonNull
2.17.7. Numbers
2.17.8. bool
2.17.9. char
2.17.10. str
2.17.11. String
2.17.12. Number Slices
2.17.13. Boxed Number Slices
2.17.14. Result<T, E>
2.18. #[wasm_bindgen] Attributes
2.18.1. On JavaScript Imports
2.18.1.1. catch
2.18.1.2. constructor
2.18.1.3. extends
2.18.1.4. getter and setter
2.18.1.5. final
2.18.1.6. indexing_getter, indexing_setter, and indexing_deleter
2.18.1.7. js_class = "Blah"
2.18.1.8. js_name
2.18.1.9. js_namespace
2.18.1.10. method
2.18.1.11. module = "blah"
2.18.1.12. raw_module = "blah"
2.18.1.13. no_deref
2.18.1.14. static_method_of = Blah
2.18.1.15. structural
2.18.1.16. typescript_type
2.18.1.17. variadic
2.18.1.18. vendor_prefix
2.18.2. On Rust Exports
2.18.2.1. constructor
2.18.2.2. js_name = Blah
2.18.2.3. js_class = Blah
2.18.2.4. readonly
2.18.2.5. skip
2.18.2.6. skip_jsdoc
2.18.2.7. start
2.18.2.8. main
2.18.2.9. typescript_custom_section
2.18.2.10. getter and setter
2.18.2.11. inspectable
2.18.2.12. skip_typescript
2.18.2.13. getter_with_clone
2.18.2.14. unchecked_return_type and unchecked_param_type
2.18.2.15. return_description and param_description
3. web-sys
3.1. Using web-sys
3.2. Cargo Features
3.3. Function Overloads
3.4. Type Translations
3.5. Inheritance
3.6. Unstable APIs
4. Testing with wasm-bindgen-test
4.1. Usage
4.2. Writing Asynchronous Tests
4.3. Testing in Headless Browsers
4.4. Continuous Integration
4.5. Coverage (Experimental)
5. Contributing to wasm-bindgen
5.1. Testing
5.2. Internal Design
5.2.1. JS Objects in Rust
5.2.2. Exporting a function to JS
5.2.3. Exporting a struct to JS
5.2.4. Importing a function from JS
5.2.5. Importing a class from JS
5.2.6. Rust Type conversions
5.2.7. Types in wasm-bindgen
5.3. js-sys
5.3.1. Testing
5.3.2. Adding More APIs
5.4. web-sys
5.4.1. Overview
5.4.2. Testing
5.4.3. Logging
5.4.4. Supporting More Web APIs
5.5. Publishing
5.6. Team
The `wasm-bindgen` GuideJsValue
T parameter
&T parameter
&mut T parameter
T return value
Option parameter
Option return value
JavaScript representation
Yes
Yes
No
Yes
No
No
Any JavaScript value
Example Rust Usage
# #![allow(unused_variables)]
#fn main() {
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn take_js_value_by_value(x: JsValue) {}
#[wasm_bindgen]
pub fn take_js_value_by_shared_ref(x: &JsValue) {}
#[wasm_bindgen]
pub fn return_js_value() -> JsValue {
JsValue::NULL
}
#}
Example JavaScript Usage
import {
take_js_value_by_value,
take_js_value_by_shared_ref,
return_js_value,
} from './guide_supported_types_examples';
take_js_value_by_value(42);
take_js_value_by_shared_ref('hello');
let v = return_js_value();