wasm-bindgen/examples
Alex Crichton 269c491380
Gate web-sys APIs on activated features (#790)
* Gate `web-sys` APIs on activated features

Currently the compile times of `web-sys` are unfortunately prohibitive,
increasing the barrier to using it. This commit updates the crate to instead
have all APIs gated by a set of Cargo features which affect what bindings are
generated at compile time (and which are then compiled by rustc). It's
significantly faster to activate only a handful of features vs all thousand of
them!

A magical env var is added to print the list of all features that should be
generated, and then necessary logic is added to ferry features from the build
script to the webidl crate which then uses that as a filter to remove items
after parsing. Currently parsing is pretty speedy so we'll unconditionally parse
all WebIDL files, but this may change in the future!

For now this will make the `web-sys` crate a bit less ergonomic to use as lots
of features will need to be specified, but it should make it much more
approachable in terms of first-user experience with compile times.

* Fix AppVeyor testing web-sys

* FIx a typo

* Udpate feature listings from rebase conflicts

* Add some crate docs and such
2018-09-05 12:55:30 -07:00
..
add Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
asm.js Remove --wasm2js flag entirely 2018-09-03 13:56:55 -04:00
canvas Gate web-sys APIs on activated features (#790) 2018-09-05 12:55:30 -07:00
char Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
closures Move the unsize feature behind a nightly Cargo feature 2018-08-19 14:45:59 -07:00
comments Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
console_log Fix the console_log example 2018-08-30 12:55:21 -07:00
dom Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
fetch Gate web-sys APIs on activated features (#790) 2018-09-05 12:55:30 -07:00
guide-supported-types-examples Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
hello_world Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
import_js Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
julia_set Delete lots of now-unused code 2018-08-30 12:54:54 -07:00
math Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
no_modules Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
performance Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
smorgasboard Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
wasm-in-wasm Remove use_extern_macros features 2018-08-19 14:33:01 -07:00
webaudio Gate web-sys APIs on activated features (#790) 2018-09-05 12:55:30 -07:00
README.md Fix some references I missed 2018-09-02 22:32:19 -04:00

Examples

This directory contains a number of examples of the #[wasm_bindgen] macro and how to display them in the browser. Each directory contains a README with a link to https://webassembly.studio so you can also explore the example online (apologies if they're out of sync!), and each directory also contains a build.sh which assembles all the relevant files locally. If you open up index.html in a web browser you should be able to see everything in action when using build.sh!

The examples here are:

  • add - an example of generating a tiny wasm binary, one that only adds two numbers.
  • asm.js - an example of using the wasm2js tool from binaryen to convert the generated WebAssembly to normal JS
  • char - an example of passing the rust char type to and from the js string type
  • closures - an example of how to invoke functions like setInterval or use the onclick property in conjunction with closures.
  • comments - an example of how Rust comments are copied into js bindings
  • console_log - a showcase of #[wasm_bindgen] importing classes and how to bind console.log
  • dom - an example of accessing the global document object and appending HTML to it
  • fetch -- how to use the Fetch API to make async http requests
  • hello_world - the "hello world" of #[wasm_bindgen], aka throwing up a dialog greeting you
  • import_js - an example of importing local JS functionality into a crate
  • math - like console_log except showing how to import Math-related functions instead
  • no_modules - an example of how to use the --no-modules flag to the wasm-bindgen CLI tool
  • performance - how to import APIs like performance.now() and time various operations in Rust
  • smorgasboard - a bunch of features all thrown into one, showing off the various capabilities of the #[wasm_bindgen] macro and what you can do with it from JS
  • wasm-in-wasm - how to interact with namespaced APIs like WebAssembly.Module and shows off creation of a WebAssembly module from Rust
  • webaudio - how to use the Web Audio APIs to generate sounds