nexis_wasm_plugin 0.1.5

Rust helper crate for authoring Nexis runtime-loaded WASM room plugins.
Documentation
# nexis_wasm_plugin

Rust helper crate for building Nexis runtime-loaded WASM room plugins.

This crate gives plugin authors:

- a `RoomPlugin` trait with lifecycle hooks
- a `PluginOutput` type for returning state and optional events
- an `export_plugin!` macro that exports the host ABI functions

## Install

```toml
[dependencies]
nexis_wasm_plugin = "0.1.5"
serde_json = "1"
```

## Minimal Plugin

```rust
use nexis_wasm_plugin::{export_plugin, PluginOutput, RoomPlugin};
use serde_json::{json, Value};

#[derive(Default)]
struct CounterPlugin;

impl RoomPlugin for CounterPlugin {
    fn initial_state(&self) -> Value {
        json!({ "counter": 0 })
    }

    fn on_message(&self, state: &Value, input: &Value) -> PluginOutput {
        if input.get("type").and_then(Value::as_str) == Some("inc") {
            let by = input
                .get("data")
                .and_then(|data| data.get("by"))
                .and_then(Value::as_i64)
                .unwrap_or(1);
            let current = state.get("counter").and_then(Value::as_i64).unwrap_or(0);
            let next = current + by;
            return PluginOutput::state_with_event(
                json!({ "counter": next }),
                json!({ "type": "counter.updated", "data": { "counter": next } }),
            );
        }

        PluginOutput::state(state.clone())
    }
}

export_plugin!(CounterPlugin);
```

## Build for Nexis Runtime

```bash
rustup target add wasm32-unknown-unknown
cargo build --target wasm32-unknown-unknown --release
```

Use the generated `.wasm` in `NEXIS_WASM_ROOM_PLUGINS`.

## Compatibility

`nexis_wasm_plugin` follows Nexis `0.x` compatibility policy: APIs can evolve between minor releases.
Pin and test before upgrading.