Showing
6 changed files
with
152 additions
and
0 deletions
tutorial/wasm-game-of-life/.gitignore
0 → 100644
tutorial/wasm-game-of-life/Cargo.toml
0 → 100644
| 1 | +[package] | ||
| 2 | +name = "wasm-game-of-life" | ||
| 3 | +version = "0.1.0" | ||
| 4 | +authors = ["hopp@silpion.de"] | ||
| 5 | +edition = "2018" | ||
| 6 | + | ||
| 7 | +[lib] | ||
| 8 | +crate-type = ["cdylib", "rlib"] | ||
| 9 | + | ||
| 10 | +[features] | ||
| 11 | +default = ["console_error_panic_hook"] | ||
| 12 | + | ||
| 13 | +[dependencies] | ||
| 14 | +wasm-bindgen = "0.2" | ||
| 15 | + | ||
| 16 | +# The `console_error_panic_hook` crate provides better debugging of panics by | ||
| 17 | +# logging them with `console.error`. This is great for development, but requires | ||
| 18 | +# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for | ||
| 19 | +# code size when deploying. | ||
| 20 | +console_error_panic_hook = { version = "0.1.1", optional = true } | ||
| 21 | + | ||
| 22 | +# `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size | ||
| 23 | +# compared to the default allocator's ~10K. It is slower than the default | ||
| 24 | +# allocator, however. | ||
| 25 | +# | ||
| 26 | +# Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now. | ||
| 27 | +wee_alloc = { version = "0.4.2", optional = true } | ||
| 28 | + | ||
| 29 | +[dev-dependencies] | ||
| 30 | +wasm-bindgen-test = "0.2" | ||
| 31 | + | ||
| 32 | +[profile.release] | ||
| 33 | +# Tell `rustc` to optimize for small code size. | ||
| 34 | +opt-level = "s" |
tutorial/wasm-game-of-life/README.md
0 → 100644
| 1 | +<div align="center"> | ||
| 2 | + | ||
| 3 | + <h1><code>wasm-pack-template</code></h1> | ||
| 4 | + | ||
| 5 | + <strong>A template for kick starting a Rust and WebAssembly project using <a href="https://github.com/rustwasm/wasm-pack">wasm-pack</a>.</strong> | ||
| 6 | + | ||
| 7 | + <p> | ||
| 8 | + <a href="https://travis-ci.org/rustwasm/wasm-pack-template"><img src="https://img.shields.io/travis/rustwasm/wasm-pack-template.svg?style=flat-square" alt="Build Status" /></a> | ||
| 9 | + </p> | ||
| 10 | + | ||
| 11 | + <h3> | ||
| 12 | + <a href="https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html">Tutorial</a> | ||
| 13 | + <span> | </span> | ||
| 14 | + <a href="https://discordapp.com/channels/442252698964721669/443151097398296587">Chat</a> | ||
| 15 | + </h3> | ||
| 16 | + | ||
| 17 | + <sub>Built with 🦀🕸 by <a href="https://rustwasm.github.io/">The Rust and WebAssembly Working Group</a></sub> | ||
| 18 | +</div> | ||
| 19 | + | ||
| 20 | +## About | ||
| 21 | + | ||
| 22 | +[**📚 Read this template tutorial! 📚**][template-docs] | ||
| 23 | + | ||
| 24 | +This template is designed for compiling Rust libraries into WebAssembly and | ||
| 25 | +publishing the resulting package to NPM. | ||
| 26 | + | ||
| 27 | +Be sure to check out [other `wasm-pack` tutorials online][tutorials] for other | ||
| 28 | +templates and usages of `wasm-pack`. | ||
| 29 | + | ||
| 30 | +[tutorials]: https://rustwasm.github.io/docs/wasm-pack/tutorials/index.html | ||
| 31 | +[template-docs]: https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html | ||
| 32 | + | ||
| 33 | +## 🚴 Usage | ||
| 34 | + | ||
| 35 | +### 🐑 Use `cargo generate` to Clone this Template | ||
| 36 | + | ||
| 37 | +[Learn more about `cargo generate` here.](https://github.com/ashleygwilliams/cargo-generate) | ||
| 38 | + | ||
| 39 | +``` | ||
| 40 | +cargo generate --git https://github.com/rustwasm/wasm-pack-template.git --name my-project | ||
| 41 | +cd my-project | ||
| 42 | +``` | ||
| 43 | + | ||
| 44 | +### 🛠️ Build with `wasm-pack build` | ||
| 45 | + | ||
| 46 | +``` | ||
| 47 | +wasm-pack build | ||
| 48 | +``` | ||
| 49 | + | ||
| 50 | +### 🔬 Test in Headless Browsers with `wasm-pack test` | ||
| 51 | + | ||
| 52 | +``` | ||
| 53 | +wasm-pack test --headless --firefox | ||
| 54 | +``` | ||
| 55 | + | ||
| 56 | +### 🎁 Publish to NPM with `wasm-pack publish` | ||
| 57 | + | ||
| 58 | +``` | ||
| 59 | +wasm-pack publish | ||
| 60 | +``` | ||
| 61 | + | ||
| 62 | +## 🔋 Batteries Included | ||
| 63 | + | ||
| 64 | +* [`wasm-bindgen`](https://github.com/rustwasm/wasm-bindgen) for communicating | ||
| 65 | + between WebAssembly and JavaScript. | ||
| 66 | +* [`console_error_panic_hook`](https://github.com/rustwasm/console_error_panic_hook) | ||
| 67 | + for logging panic messages to the developer console. | ||
| 68 | +* [`wee_alloc`](https://github.com/rustwasm/wee_alloc), an allocator optimized | ||
| 69 | + for small code size. |
tutorial/wasm-game-of-life/src/lib.rs
0 → 100644
| 1 | +mod utils; | ||
| 2 | + | ||
| 3 | +use wasm_bindgen::prelude::*; | ||
| 4 | + | ||
| 5 | +// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global | ||
| 6 | +// allocator. | ||
| 7 | +#[cfg(feature = "wee_alloc")] | ||
| 8 | +#[global_allocator] | ||
| 9 | +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; | ||
| 10 | + | ||
| 11 | +#[wasm_bindgen] | ||
| 12 | +extern { | ||
| 13 | + fn alert(s: &str); | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +#[wasm_bindgen] | ||
| 17 | +pub fn greet() { | ||
| 18 | + alert("Hello, {{project-name}}!"); | ||
| 19 | +} |
tutorial/wasm-game-of-life/src/utils.rs
0 → 100644
| 1 | +pub fn set_panic_hook() { | ||
| 2 | + // When the `console_error_panic_hook` feature is enabled, we can call the | ||
| 3 | + // `set_panic_hook` function at least once during initialization, and then | ||
| 4 | + // we will get better error messages if our code ever panics. | ||
| 5 | + // | ||
| 6 | + // For more details see | ||
| 7 | + // https://github.com/rustwasm/console_error_panic_hook#readme | ||
| 8 | + #[cfg(feature = "console_error_panic_hook")] | ||
| 9 | + console_error_panic_hook::set_once(); | ||
| 10 | +} |
tutorial/wasm-game-of-life/tests/web.rs
0 → 100644
Please
register
or
login
to post a comment