| Crates.io | stateroom-wasm |
| lib.rs | stateroom-wasm |
| version | 0.4.4 |
| created_at | 2022-01-20 12:32:20.144623+00 |
| updated_at | 2024-08-04 17:05:56.451845+00 |
| description | A macro for building a Stateroom service as a WebAssembly module. |
| homepage | |
| repository | https://github.com/drifting-in-space/stateroom |
| max_upload_size | |
| id | 517637 |
| size | 5,898 |
stateroom-wasmstateroom-wasm is a companion crate to stateroom that helps you package and
export services as WebAssembly modules.
#[stateroom_wasm] macroWebAssembly modules must import and export certain named functions in order for the
Stateroom server to understand them. stateroom_wasm provides the #[stateroom_wasm] module,
which should be applied to an item (struct, enum, or type alias) that implements
SimpleStateroomService.
A Stateroom-compatible WebAssembly module must contain exactly one service. If you need to generate multiple services for your application, currently the best approach is to make a crate for each service.
It's possible to generate bindings for a service that belongs to another module using
a type alias:
use stateroom_wasm::stateroom_wasm;
use some_module::SomeService;
#[stateroom_wasm]
type Service = SomeService;
Upon initialization, the generated model creates an instance of your SimpleStateroomService
by calling its new(room_id, context) constructor. The context object that is passed in the
constructor and subsequent function calls is a global static object that binds to functions
imported from the host environment (like send_message).
If you are using the Stateroom command-line interface, stateroom dev will build the
current crate using the wasm32-wasi target, and then load and serve the generated
WebAssembly module.
If you would like to build it manually, make sure you have the wasm32-wasi target installed
and pass it as a target to cargo build:
$ rustup target add wasm32-wasi
$ cargo build --release --target=wasm32-wasi
This crate has a counterpart, stateroom-wasm-host, which can take a module generated with
this crate and expose it through a StateroomService interface.