wasmir

Crates.iowasmir
lib.rswasmir
version0.1.13
sourcesrc
created_at2021-06-09 04:20:46.565889
updated_at2021-06-10 02:38:13.519032
descriptionA library for automating statically linking WASM binaries.
homepage
repositoryhttps://github.com/anyusernameworks/wasmir
max_upload_size
id408032
size28,534
Jared Landers (anyusernameworks)

documentation

README

wasmir

A library for embedding high-performance WASM code directly in a Rust program. This package was created for people who absolutely hate writing Javascript. The goal of this library is to reduce the amount of overhead required to implement WASM by automatically compiling WASM modules and statically linking them to your binary. You will need to have wasm-bindgen installed. If your project stops building, please submit an issue.

Usage

Add wasmir as a dependency to your Cargo.toml:

wasmir = "0.1.13"

Code must be declared inside a module. The typical usage is as follows:

use wasmir::wasmir;

#[wasmir]
mod my_module {
   use wasm_bindgen::prelude::*;
   
   #[wasm_bindgen]
   extern "C" {
      pub fn alert(s: &str);
   }
   
   #[wasm_bindgen]
   pub fn greet(name: &str) {
      unsafe {
         alert(&format!("Hello, {}!", name));
      }
   }
}

Once the proc_macro does its work, the above module will then contain two binary blob constants, wasm and loader. Serve loader from "my_module.js" and wasm from "my_module_bg.wasm" Then, in index.js, include the following code:

import init from './my_module_bg.js';
import {greet} from './my_module_bg.js';

function run() {
   greet(\"World\");
}

init().then(run)

You can also specify WASM-dependencies like so:

#[wasmir(
[dependencies]
wasm-bindgen = "*"
[dependencies.web-sys]
version = "*"
features = ["Document", "Node", "Element"]
)]
Commit count: 34

cargo fmt