Expand description
This crate provides rust library to easily compose WASM/WASI browser service worker.
§General overview
ServiceWorker is a singleton which holds input and output file handles and owns worker via Handler trait. Worker is supposedly reactive, usually operating on incoming events (on_message) and posting messages to main browser application via ServiceWorker::post_message().
§Example usage:
use wasi_worker::*;
struct MyWorker {}
impl Handler for MyWorker {
fn on_message(&self, msg: &[u8]) -> std::io::Result<()> {
// Process incoming message
println!("My Worker got message: {:?}", msg);
Ok(())
}
}
fn main() {
// In WASI setup with JS glue all output will be posted to memfs::/output.bin
// In native OS to be able to run test from shell output goes to ./output.bin
let opt = ServiceOptions::default().with_cleanup();
let output_file = match &opt.output { FileOptions::File(path) => path.clone() };
ServiceWorker::initialize(opt)
.expect("ServiceWorker::initialize");
// Attach Agent to ServiceWorker as message handler singleton
ServiceWorker::set_message_handler(Box::new(MyWorker {}));
// Send binary message to main browser application
ServiceWorker::post_message(b"message")
.expect("ServiceWorker.post_message");
}
Structs§
- Service
Options - Options for ServiceWorker
- Service
Worker - Connects Rust Handler with browser service worker via WASI filesystem.
Enums§
- File
Options - Instructs on file descriptor configuration for ServiceWorker
Traits§
- Handler
- Handler for incoming messages via ServiceWorker