wirm 4.0.4

A lightweight WebAssembly Transformation Library for the Component Model
Documentation
<div align="center">
  <h1>Wirm 🐉</h1>

  Wirm is a **W**ebAssembly **IR** **M**anipulation Library for the Component Model.

  **NOTE: This project used to be known as Orca, see discussion on refactor [here](https://github.com/thesuhas/wirm/issues/245).**

  It is based on [Dfinity's IC codebase](https://github.com/dfinity/ic/tree/master/rs/wasm_transform) and [Walrus](https://github.com/rustwasm/walrus/tree/main).
</div>

## About ##

`Wirm` is a light-weight, easy-to-use, Rust Library for performing WebAssembly transformations.
It uses [wasmparser](https://docs.rs/wasmparser/0.214.0/wasmparser/) and [wasm_encoder](https://docs.rs/wasm-encoder/0.214.0/wasm_encoder/) to parse and encode Wasm components/modules and maintains its own Intermediate Representation.

`Wirm` also includes some handy visitors for walking Wasm components:
- [`walk_structural`]https://docs.rs/wirm/latest/wirm/ir/component/visitor/fn.walk_structural.html: to walk a Component using its structural (in-file) order.
- [`walk_topological`]https://docs.rs/wirm/latest/wirm/ir/component/visitor/fn.walk_topological.html: to walk a Component in topological (dependency) order (useful when traversing a component post-instrumentation).

Several projects already leverage these visitors!
1. `Wirm` (that's right, we eat our own dogfood here): at encode time, `wirm` uses `walk_topological` to ensure that instrumented components get encoded without introducing forward references.
2. [`cviz`]https://github.com/cosmonic-labs/cviz: Uses `walk_structural` to discover the internal composition of a component.
3. [`splicer`]https://github.com/ejrgilbert/splicer: Uses `walk_structural` to split out subcomponents from their root.

## Cargo Features ##

### Parallel Processing

Wirm supports parallel processing during module parsing and encoding to improve performance for modules with many functions. This feature uses [rayon](https://docs.rs/rayon/latest/rayon/) to process function bodies concurrently.

Enable the feature by adding the `parallel` feature to your `Cargo.toml`:

```toml
[dependencies]
wirm = { version = "1.1.0", features = ["parallel"] }
```