wac-cli 0.10.0

A tool for encoding and decoding WebAssembly compositions.
Documentation
# Examples

This example is composed of three different but equal ways for composing two example components together
* two ways using the `wac` CLI
* using the `wac-graph` library crate

The example uses two input components (both located in the `deps` directory) that will be composed together:

The `hello` component exports a function `hello` which returns a string:

```bash
# Print the wit for the hello component
$ wasm-tools component wit deps/example/hello.wasm 
package root:component;

world root {
  export hello: func() -> string;
}
```

The `hello` exported function from `hello.wasm` will be plugged into the `hello` import of the `greeter` component which has the same signature as the `hello` exported function: 

```bash
# Print the wit for the greeter component
$ wasm-tools component wit deps/example/greeter.wasm 
package root:component;

world root {
  import hello: func() -> string;

  export greet: func() -> string;
}
```

The resulting composed component will therefore only have the exported `greet` function originally from the `greeter` component.

## `wac compose`

`wac` can be used as a CLI tool. The `wac compose` command takes a wac script as input which defines how two components are composed together.

Running the following command should produce a new component that is the composition of the `hello` and `greeter` components.

```bash
wac compose script.wac -o composed.wasm
```

*Note*: `wac compose` expects to find any input components inside of a `deps` folder in a directory named after the namespace part of the input component's name (however, this is configurable with the `--deps-dir` option). In our example, the wac script uses the `example:greeter` and `example:hello` input components so `wac compose` expects to find those components in the `deps/example` directory.

## `wac plug`

`wac` also comes with an opinionated CLI option called `wac plug` which will "plug" the exports of one component (the "plug") into equivalently named imports of another component (the "socket").

In this example, we can do this with the following invocation:

```bash
wac plug --plug deps/example/hello.wasm deps/example/greeter.wasm -o composed.wasm
```

## Programmatic Graph API

You can also build the composition using the programmatic API used by the `programmatic` example binary. This can be done by running the following inside the `programmatic` directory:

```bash
cargo run
```