Facilitating high-level interactions between Wasm modules and JavaScript
Go to file
R. Andrew Ohana 5b952f2081 webidl: add support for partial interfaces and mixins
This is a major change to how webidl is processed. This adds
a two phase process, where the first phase records the names of
various types and indexes the mixins (and might do more in the
future). The actual program building happens in the second phase.

As part of this, this also makes it so that interface objects
are passed by reference, rather than by value. The spec isn't
exactly clear on this, but Mozilla's C++ reflection suggestions
seem to indicate that they should be passed by reference (see
https://developer.mozilla.org/en-US/docs/Mozilla/WebIDL_bindings).
2018-07-11 19:25:16 -07:00
crates webidl: add support for partial interfaces and mixins 2018-07-11 19:25:16 -07:00
examples adds julia set example (#419) 2018-07-08 10:57:19 -05:00
guide Create the web-sys crate mechanically from WebIDL (#409) 2018-07-09 16:35:25 -07:00
releases Add a template for release announcements 2018-06-19 12:05:52 -07:00
src bindings for Date.prototype.setUTCXXX() (#456) 2018-07-11 09:27:59 -05:00
tests/all bindings for Date.prototype.setUTCXXX() (#456) 2018-07-11 09:27:59 -05:00
.appveyor.yml Only check the master branch 2018-07-06 13:30:28 -07:00
.eslintignore Applied eslint from main .eslintrc to examples (#418) 2018-07-08 01:02:10 -05:00
.eslintrc Create the web-sys crate mechanically from WebIDL (#409) 2018-07-09 16:35:25 -07:00
.gitattributes add .gitattributes to mark WebIDL as vendored 2018-07-11 18:48:51 -04:00
.gitignore Binding for Math.cos,cosh,exp,expml,fround,imul,log,log10,log1p,log2 2018-06-28 12:46:53 -04:00
.travis.yml Build documentation for master branch on gh-pages 2018-07-11 07:10:01 -07:00
Cargo.toml Create the web-sys crate mechanically from WebIDL (#409) 2018-07-09 16:35:25 -07:00
CHANGELOG.md Add a change log 2018-06-19 12:05:52 -07:00
CONTRIBUTING.md Point to the guide's contributing section instead of CONTRIBUTING.md 2018-06-19 12:05:52 -07:00
LICENSE-APACHE Add license texts 2017-12-18 14:45:06 -08:00
LICENSE-MIT Add license texts 2017-12-18 14:45:06 -08:00
package.json Bump eslint from 5.0.1 to 5.1.0 2018-07-09 05:50:55 +00:00
README.md Point to the guide's contributing section instead of CONTRIBUTING.md 2018-06-19 12:05:52 -07:00
yarn.lock Bump eslint from 5.0.1 to 5.1.0 2018-07-09 05:50:55 +00:00

wasm-bindgen

Facilitating high-level interactions between wasm modules and JavaScript.

Introduction blog post: "JavaScript to Rust and Back Again: A wasm-bindgen Tale"

Build Status Build status API Documentation on docs.rs

Import JavaScript things into Rust and export Rust things to JavaScript.

src/lib.rs:

#![feature(proc_macro, wasm_custom_section, wasm_import_module)]

extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;

// Import the `window.alert` function from the Web.
#[wasm_bindgen]
extern {
    fn alert(s: &str);
}

// Export a `greet` function from Rust to JavaScript, that alerts a
// hello message.
#[wasm_bindgen]
pub fn greet(name: &str) {
    alert(&format!("Hello, {}!", name));
}

Use exported Rust things from JavaScript!

index.js:

// Asynchronously load, compile, and import the Rust's WebAssembly
// and JavaScript interface.
import("./hello_world").then(module => {
  // Alert "Hello, World!"
  module.greet("World!");
});

Guide

📚 Read the wasm-bindgen guide here! 📚

License

This project is licensed under either of

at your option.

Contribution

See the "Contributing" section of the guide for information on hacking on wasm-bindgen!

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.