2018-06-19 11:10:41 -07:00
|
|
|
<meta charset="utf-8"/>
|
2017-12-18 14:49:04 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
# `wasm-bindgen`
|
2018-01-29 21:20:38 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
**Facilitating high-level interactions between wasm modules and JavaScript.**
|
|
|
|
|
|
|
|
[Introduction blog post: "JavaScript to Rust and Back Again: A `wasm-bindgen` Tale"][post]
|
2018-04-20 11:34:34 -07:00
|
|
|
|
2018-01-29 21:20:38 -08:00
|
|
|
[host]: https://github.com/WebAssembly/host-bindings
|
2018-04-20 11:34:34 -07:00
|
|
|
[post]: https://hacks.mozilla.org/2018/04/javascript-to-rust-and-back-again-a-wasm-bindgen-tale/
|
2017-12-18 14:49:04 -08:00
|
|
|
|
2018-04-09 21:26:15 +02:00
|
|
|
[](https://travis-ci.org/rustwasm/wasm-bindgen)
|
2018-04-09 12:49:08 -07:00
|
|
|
[](https://ci.appveyor.com/project/alexcrichton/wasm-bindgen)
|
2018-06-19 11:10:41 -07:00
|
|
|
[](https://crates.io/crates/wasm-bindgen)
|
|
|
|
[](https://crates.io/crates/wasm-bindgen)
|
|
|
|
[](https://docs.rs/wasm-bindgen)
|
2017-12-18 14:49:04 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
Import JavaScript things into Rust and export Rust things to JavaScript.
|
2017-12-18 16:35:36 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
`src/lib.rs`:
|
2017-12-18 16:35:36 -08:00
|
|
|
|
|
|
|
```rust
|
2018-03-14 14:33:53 -07:00
|
|
|
#![feature(proc_macro, wasm_custom_section, wasm_import_module)]
|
2017-12-18 16:35:36 -08:00
|
|
|
|
|
|
|
extern crate wasm_bindgen;
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
// Import the `window.alert` function from the Web.
|
2018-02-07 16:41:33 -08:00
|
|
|
#[wasm_bindgen]
|
|
|
|
extern {
|
|
|
|
fn alert(s: &str);
|
|
|
|
}
|
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
// Export a `greet` function from Rust to JavaScript, that alerts a
|
|
|
|
// hello message.
|
2018-02-07 16:41:33 -08:00
|
|
|
#[wasm_bindgen]
|
2018-03-05 23:25:15 +01:00
|
|
|
pub fn greet(name: &str) {
|
2018-02-07 16:41:33 -08:00
|
|
|
alert(&format!("Hello, {}!", name));
|
2017-12-18 16:35:36 -08:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
Use exported Rust things from JavaScript!
|
2018-01-29 21:20:38 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
`index.js`:
|
2018-01-29 21:20:38 -08:00
|
|
|
|
|
|
|
```js
|
2018-06-19 11:10:41 -07:00
|
|
|
// Asynchronously load, compile, and import the Rust's WebAssembly
|
|
|
|
// and JavaScript interface.
|
|
|
|
import("./hello_world").then(module => {
|
|
|
|
// Alert "Hello, World!"
|
|
|
|
module.greet("World!");
|
2018-01-29 21:20:38 -08:00
|
|
|
});
|
2017-12-19 19:06:48 -08:00
|
|
|
```
|
2017-12-18 16:35:36 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
## Guide
|
2018-03-02 20:11:30 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
[📚 Read the `wasm-bindgen` guide here! 📚](https://rustwasm.github.io/wasm-bindgen)
|
2018-03-02 20:19:39 -08:00
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
## License
|
2017-12-18 14:49:04 -08:00
|
|
|
|
|
|
|
This project is licensed under either of
|
|
|
|
|
|
|
|
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
* MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
|
|
|
http://opensource.org/licenses/MIT)
|
|
|
|
|
|
|
|
at your option.
|
|
|
|
|
2018-06-19 11:10:41 -07:00
|
|
|
## Contribution
|
|
|
|
|
2018-06-19 11:49:34 -07:00
|
|
|
**[See the "Contributing" section of the guide for information on
|
|
|
|
hacking on `wasm-bindgen`!][contributing]**
|
2017-12-18 14:49:04 -08:00
|
|
|
|
|
|
|
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.
|
2018-02-23 14:52:45 +01:00
|
|
|
|
2018-06-19 11:49:34 -07:00
|
|
|
[contributing]: https://rustwasm.github.io/wasm-bindgen/contributing.html
|