Crates.io | wasi-worker-yew |
lib.rs | wasi-worker-yew |
version | 0.5.2 |
source | src |
created_at | 2019-11-18 16:13:00.091808 |
updated_at | 2020-02-07 15:20:16.917283 |
description | WASM/WASI browser service worker for yew (Agent |
homepage | |
repository | https://github.com/dunnock/wasi-worker/tree/master/crates/wasi-worker-yew |
max_upload_size | |
id | 182240 |
size | 8,955 |
This library allows to compile and deploy yew worker with wasm32-wasi target. It allows to compile and run POSIX-like applications, having access to timer, random numbers and to emulated file system (memfs).
On some operations wasi workers run faster than wasm-bindgen or stdweb.
Cargo.toml
wasi-worker-yew = "0.4"
src/bin/worker.rs
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) { /* */ }
fn name_of_resource() -> &'static str {
"worker.js"
}
};
fn main() {
let opt = ServiceOptions::default().with_cleanup();
ServiceWorker::initialize(opt)
.expect("ServiceWorker::initialize");
ServiceWorker::set_message_handler(Box::new(WASIAgent::<MyAgent>::new()));
}
To simplify build and deploy you may use wasi-worker-cli:
cargo install wasi-worker-cli --force
Deployment script will place compiled and optimized worker target and JS glue code under ./dist
:
wasiworker deploy