wasm-wrapper-gen

Crates.iowasm-wrapper-gen
lib.rswasm-wrapper-gen
version0.0.3
sourcesrc
created_at2017-11-27 22:37:25.49572
updated_at2017-12-06 07:20:37.434743
descriptionJavaScript wrapper generation for rust code targeting wasm32-unknown-unknown
homepage
repositoryhttps://github.com/daboross/wasm-wrapper-gen
max_upload_size
id40790
size5,416
(daboross)

documentation

README

wasm-wrapper-gen

JavaScript wrapper generation for rust code targeting wasm32-unknown-unknown.

This repository is currently very WIP, but there's a full working example Cargo project in examples/simple_summation/.

General overview:

wasm-wrapper-gen is composed of two interlocking parts:

  • wasm-wrapper-gen provides the js_fn!() macro which generates extern "C" functions
  • wasm-wrapper-gen-build is a build-script utility which scrapes the source for usages of js_fn!() and generates a JavaScript file which binds to those exported functions.

Note: this assumes little-endian hardware (the majority of modern hardware).

Currently supported:

  • Argument types:
    • bool, u8, u16, u32, usize, i8, i16, i32, isize, f32, f64
    • &[_], &mut [_], Vec<_> where _ is any of the above
  • Return types:
    • bool, u8, u16, u32, usize, i8, i16, i32, isize, f32, f64
    • Vec<_> where _ is any of the above
  • Full automatic memory management and freeing unless rust function panics
  • Configuration to use either a single DataView or a TypedArray instance per argument to access arrays
  • Configurable output JS indentation

Unimplemented:

  • Next to do:

    • Add support for making an async constructor rather than sync one.
    • Add support for impl blocks with self arguments and creating wrapper JS types which manage allocation sanely.
  • Further future:

    • Make real tests and figure out how to do a build.rs script which only runs for tests
    • Arbitrary argument types implementing some serialization trait
    • Macro to wrap individual structs in separate JavaScript classes which all reference the same WebAssembly.Instance

Links:

Commit count: 34

cargo fmt