Crates.io | swasm |
lib.rs | swasm |
version | 0.31.3 |
source | src |
created_at | 2019-05-13 22:06:26.218727 |
updated_at | 2019-05-13 22:06:26.218727 |
description | WebAssembly binary format serialization/deserialization/interpreter |
homepage | https://github.com/susytech/swasm |
repository | https://github.com/susytech/swasm |
max_upload_size | |
id | 134107 |
size | 254,201 |
Low-level WebAssembly format library.
Add to Cargo.toml
[dependencies]
swasm = "0.31"
and then
extern crate swasm;
let module = swasm::deserialize_file("./res/cases/v1/hello.swasm").unwrap();
assert!(module.code_section().is_some());
let code_section = module.code_section().unwrap(); // Part of the module with functions code
println!("Function count in swasm file: {}", code_section.bodies().len());
swasm
supports full wabt testsuite (https://github.com/WebAssembly/testsuite), running asserts that involves deserialization.
To run testsuite:
wabt
(since swasm builds it internally using wabt-rs
, see https://github.com/WebAssembly/wabt)git submodule update --init --recursive
)cargo test --release --manifest-path=spec/Cargo.toml
Decoder can be fuzzed with cargo-fuzz
using swasm-opt
(https://github.com/WebAssembly/binaryen):
binaryen
and cargo-fuzz
(cmake
and a C++11 toolchain)git submodule update --init --recursive
)cargo fuzz
subcommand with cargo install cargo-fuzz
cargo fuzz
uses a rust compiler plugin: rustup override set nightly
cargo fuzz run deserialize
no_std
cratesThis 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
:
[dependencies]
swasm = { version = "0.31", default-features = false }
Until allocator api is stabilized, this type of use is limited to nightly Rust.
swasm
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.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in swasm by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.