2 releases
0.1.1 | Sep 5, 2021 |
---|---|
0.1.0 | Sep 5, 2021 |
#994 in WebAssembly
11KB
201 lines
A low-ish level tool for easily writing and hosting WASM based plugins.
The goal of wasm_plugin is to make communicating across the host-plugin boundary as simple and idiomatic as possible while being unopinionated about how you actually use the plugin.
Loading a plugin is as simple as reading the .wasm file off disk.
let mut plugin = WasmPluginBuilder::from_file("path/to/plugin.wasm")?.finish()?;
Calling functions exported by the plugin takes one of two forms. Either the function takes no arguments and returns a single serde deserializable value:
let response: ResultType = plugin.call_function("function_name")?;
Or it takes a single serializable argument and returns a single result:
let message = Message::default();
let response: ResultType = plugin.call_function_with_argument("function_name", &message)?;
Exporting a function from a plugin is just a matter of wrapping it in a macro:
fn local_hello() -> String {
"Hello, host!".to_string()
}
wasm_plugin_guest::export_plugin_function_with_no_input(hello, local_hello);
API Stability
I am not currently guaranteeing any stability, expect all releases to include breaking changes.
lib.rs
:
This crate provides attribute macros used by wasmtime_plugin_guest
Dependencies
~1.5MB
~33K SLoC