Crate wasi_worker

Source
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§

ServiceOptions
Options for ServiceWorker
ServiceWorker
Connects Rust Handler with browser service worker via WASI filesystem.

Enums§

FileOptions
Instructs on file descriptor configuration for ServiceWorker

Traits§

Handler
Handler for incoming messages via ServiceWorker

Functions§

message_ready