wasm-wrapper-gen 0.0.3

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

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:

- [Full example of usage]docs/usage-example.md
- [Full example of generated code]docs/compiled-example.md