susywasm

Low-level WebAssembly format library.

Build Status crates.io link

Documentation

Rust WebAssembly format serializing/deserializing

Add to Cargo.toml

toml [dependencies] susywasm = "0.31"

and then

```rust

extern crate susywasm;

let module = susywasm::deserializefile("./res/cases/v1/hello.susywasm").unwrap(); assert!(module.codesection().is_some());

let codesection = module.codesection().unwrap(); // Part of the module with functions code

println!("Function count in susywasm file: {}", code_section.bodies().len()); ```

Wabt Test suite

susywasm supports full wabt testsuite (https://github.com/WebAssembly/testsuite), running asserts that involves deserialization.

To run testsuite: - make sure you have all prerequisites to build wabt (since susywasm builds it internally using wabt-rs, see https://github.com/WebAssembly/wabt) - checkout with submodules (git submodule update --init --recursive) - run cargo test --release --manifest-path=spec/Cargo.toml

Decoder can be fuzzed with cargo-fuzz using susywasm-opt (https://github.com/WebAssembly/binaryen):

no_std crates

This crate has a feature, std, that is enabled by default. To use this crate in a no_std context, add the following to your Cargo.toml:

toml [dependencies] susywasm = { version = "0.31", default-features = false }

Until allocator api is stabilized, this type of use is limited to nightly Rust.

License

susywasm is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), at your choice.

See LICENSE-APACHE, and LICENSE-MIT for details.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in susywasm by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.