wasm_actor_bridge/lib.rs
1//! `wasm-actor-bridge` — typed, zero-copy Web Worker bridge for Rust/WASM.
2//!
3//! # Architecture
4//!
5//! - Define an actor: `impl WorkerActor for MyWorker { ... }`
6//! - Spawn via `SupervisorBuilder::new(url).evt_capacity(32).init(payload).build()`
7//! - Send commands: `handle.send(cmd)` (fire-and-forget) or `handle.call(cmd)` (RPC with `CallHandle`)
8//! - Receive events: `EventStream<Evt>` (async `Stream`)
9//! - Cancel requests: drop the `CallHandle` or check `CancellationToken::is_cancelled()`
10//!
11//! # Worker Pool
12//!
13//! For parallel processing, use `WorkerPool::new(handles, RoutingStrategy::RoundRobin)`.
14//! Merge event streams via `futures::stream::select_all`.
15//!
16//! # Main thread
17//!
18//! ```rust,ignore
19//! let (handle, mut events) = SupervisorBuilder::<MyCmd, MyEvt, MyInit>::new("/worker.js")
20//! .evt_capacity(32)
21//! .init(my_init)
22//! .build()?;
23//!
24//! // Fire-and-forget.
25//! handle.send(MyCmd::Ping)?;
26//!
27//! // RPC (request/response) — cancel-on-drop.
28//! let response: MyEvt = handle.call(MyCmd::FetchPage { start: 0 }).await?;
29//! ```
30//!
31//! # Worker thread
32//!
33//! ```rust,ignore
34//! struct MyActor;
35//!
36//! impl WorkerActor for MyActor {
37//! type Init = MyInit;
38//! type Cmd = MyCmd;
39//! type Evt = MyEvt;
40//!
41//! async fn handle(&mut self, cmd: MyCmd, ctx: Context<MyEvt>, token: CancellationToken) {
42//! if token.is_cancelled() { return; }
43//! ctx.respond(MyEvt::Pong);
44//! }
45//! }
46//!
47//! #[wasm_bindgen(start)]
48//! pub fn main() {
49//! run_actor_loop(MyActor);
50//! }
51//! ```
52
53mod actor;
54mod builder;
55mod cancel;
56pub mod context;
57mod dispatch;
58mod error;
59mod handle;
60mod message;
61mod pool;
62mod spawn;
63mod stream;
64pub(crate) mod transfer;
65
66#[cfg(test)]
67mod tests;
68
69pub use actor::WorkerActor;
70pub use cancel::{CancelGuard, CancellationToken};
71pub use context::Context;
72pub use error::BridgeError;
73pub use message::{ActorMessage, WorkerEvent};
74
75#[cfg(target_arch = "wasm32")]
76pub use builder::SupervisorBuilder;
77#[cfg(target_arch = "wasm32")]
78pub use dispatch::run_actor_loop;
79#[cfg(target_arch = "wasm32")]
80pub use handle::{CallHandle, WorkerHandle};
81#[cfg(target_arch = "wasm32")]
82pub use pool::{RoutingStrategy, WorkerPool};
83#[cfg(target_arch = "wasm32")]
84pub use spawn::spawn_worker;
85#[cfg(target_arch = "wasm32")]
86pub use stream::EventStream;