Expand description
Yew worker compilable to wasm32-wasi target. It allows to compile and run POSIX-like applications, having access to random and to emulated file system (memfs). On some operations wasi workers run faster than wasm-bindgen or stdweb.
It depends on wasi-worker-cli for deployment.
Example usage:
use wasi_worker_yew::{ThreadedWASI, WASIAgent};
use yew::agent::*;
use wasi_worker::{FileOptions, ServiceOptions, ServiceWorker};
pub struct MyAgent;
impl Agent for MyAgent {
type Reach = Public;
type Message = String;
type Input = String;
type Output = String;
fn create(_link: AgentLink<Self>) -> Self { MyAgent { } }
fn update(&mut self, _msg: Self::Message) { /* ... */ }
fn handle(&mut self, _msg: Self::Input, _who: HandlerId) { /* */ }
// link to the JavaScript runner, worker instantiated from:
fn name_of_resource() -> &'static str { "worker.js" }
};
// In usual WASI setup with JS glue all output will be posted to /output.bin
// Though in user filesystem output goes under ./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");
ServiceWorker::set_message_handler(Box::new(WASIAgent::<MyAgent>::new()));Structs§
- Agent
Link - Link to agent’s scope for creating callbacks.
- Handler
Id - Id of responses handler.
- Public
- Create a single instance in a tab.
- Service
Options - Options for ServiceWorker
- Service
Worker - Connects Rust Handler with browser service worker via WASI filesystem.
- WASI
Agent - WASIAgent is the main executor and communication bridge for yew Agent with Reach = Public
Enums§
- File
Options - Instructs on file descriptor configuration for ServiceWorker
- From
Worker - Serializable messages sent by worker to consumer
- ToWorker
- Serializable messages to worker
Traits§
- Agent
- Declares the behavior of the agent.
- Packed
- Message packager, based on serde::Serialize/Deserialize
- ThreadedWASI
- Implements rules to register a worker in a separate thread.