Skip to main content

Crate use_wasm

Crate use_wasm 

Source
Expand description

§RustUse/use-wasm

use-wasm is a RustUse facade workspace for small, focused WebAssembly primitive crates. It models WebAssembly modules, binary and text metadata, sections, imports, exports, value types, linear memory limits, Rust Wasm targets, WASI, WIT, and Component Model vocabulary without becoming an execution or toolchain layer.

WebAssembly is broader than browser usage. It appears in server runtimes, plugin systems, portable components, edge platforms, and command-oriented system interfaces, so use-wasm lives as a top-level RustUse set rather than inside use-web.

§Non-goals

use-wasm is not:

  • a Wasm runtime
  • a compiler
  • a linker
  • an optimizer
  • a browser binding layer
  • a full Wasm binary parser
  • a full WAT, WIT, or Component Model parser
  • a replacement for wasm-bindgen, wasm-pack, wasmtime, wasmer, or cargo-component

The crates avoid runtime execution, network calls, browser-specific bindings, host system APIs, and shelling out to external Wasm tooling.

§Workspace crates

CratePathPurpose
use-wasmcrates/use-wasm/Facade over the focused WebAssembly primitive crates
use-wasm-modulecrates/use-wasm-module/Module names, metadata, imports, exports, and validation status
use-wasm-binarycrates/use-wasm-binary/Magic bytes, version bytes, binary markers, and header checks
use-wasm-textcrates/use-wasm-text/WAT identifiers, module names, S-expression markers, and text helpers
use-wasm-sectioncrates/use-wasm-section/Known section IDs, labels, parsing, and rendering
use-wasm-importcrates/use-wasm-import/Import module/name wrappers, kinds, and imported item metadata
use-wasm-exportcrates/use-wasm-export/Export name wrappers, kinds, and exported item metadata
use-wasm-memorycrates/use-wasm-memory/Page counts, memory limits, shared marker, and size conversions
use-wasm-functioncrates/use-wasm-function/Function/type/local indexes, parameter/result lists, and signatures
use-wasm-valuecrates/use-wasm-value/Wasm value type parsing, byte codes, and classification
use-wasm-targetcrates/use-wasm-target/Common Rust Wasm targets, family, ABI/profile labels, and display helpers
use-wasm-featurecrates/use-wasm-feature/Common Wasm feature flags and status labels
use-wasm-componentcrates/use-wasm-component/Component, world, interface, import/export, and package-reference primitives
use-wasm-witcrates/use-wasm-wit/WIT package, namespace, interface, world, type, function, and resource names
use-wasicrates/use-wasi/Pure WASI version, profile, interface, capability, and permission markers

§Relationships

  • use-wasm models WebAssembly primitives.
  • use-wasi is a child crate because WASI is a system interface layer for Wasm.
  • use-wasm-component and use-wasm-wit model Component Model and WIT primitives.
  • Browser-specific crates can be added later if needed, but they should not dominate v0.1.

§Installation

Use the workspace directly or depend on a Git revision until the first crates.io release is published.

[dependencies]
use-wasm = { git = "https://github.com/RustUse/use-wasm", rev = "<commit>" }

After publication, choose the narrowest focused crate that matches your use case or use the facade when one dependency is more convenient.

[dependencies]
use-wasm = "0.0.1"

§Basic usage

use use_wasm::{binary, export, import, memory, section, target, value, wasi, wit};

assert!(binary::looks_like_wasm_binary(b"\0asm\x01\0\0\0"));
assert_eq!(section::WasmSectionKind::try_from(5)?.to_string(), "memory");

let limits = memory::MemoryLimits::new(
    memory::WasmPageCount::new(1),
    Some(memory::WasmPageCount::new(2)),
)?;
let value_type: value::WasmValueType = "i64".parse()?;
let import_name = import::ImportName::new("memory")?;
let export_name = export::ExportName::new("run")?;
let wasm_target: target::WasmTarget = "wasm32-wasip1".parse()?;
let world = wit::WitWorldName::new("cli")?;
let capability = wasi::WasiCapabilityLabel::new("filesystem.read")?;

assert_eq!(limits.minimum_pages(), 1);
assert!(value_type.is_numeric());
assert_eq!(import_name.as_str(), "memory");
assert_eq!(export_name.as_str(), "run");
assert_eq!(wasm_target.pointer_width(), 32);
assert_eq!(world.as_str(), "cli");
assert_eq!(capability.as_str(), "filesystem.read");

§Development

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace --all-features

§License

Licensed under either of the following, at your option:

  • Apache License, Version 2.0
  • MIT license Thin facade for primitive WebAssembly vocabulary crates.

Re-exports§

pub use use_wasi as wasi;
pub use use_wasm_binary as binary;
pub use use_wasm_component as component;
pub use use_wasm_export as export;
pub use use_wasm_feature as feature;
pub use use_wasm_function as function;
pub use use_wasm_import as import;
pub use use_wasm_memory as memory;
pub use use_wasm_module as module;
pub use use_wasm_section as section;
pub use use_wasm_target as target;
pub use use_wasm_text as text;
pub use use_wasm_value as value;
pub use use_wasm_wit as wit;