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:
- [Full example of usage](docs/usage-example.md)
- [Full example of generated code](docs/compiled-example.md)