gloo_worker/reactor/mod.rs
1//! A future-based worker that can consume many inputs and produce many outputs.
2//!
3//! ## Example
4//!
5//! ```rust, no_run
6//! use gloo_worker::reactor::{reactor, ReactorScope};
7//! use gloo_worker::Spawnable;
8//! use futures::{sink::SinkExt, StreamExt};
9//!
10//! #[reactor]
11//! async fn SquaredOnDemand(mut scope: ReactorScope<u64, u64>) {
12//! while let Some(m) = scope.next().await {
13//! if scope.send(m.pow(2)).await.is_err() {
14//! break;
15//! }
16//! }
17//! }
18//! # async {
19//! let mut bridge = SquaredOnDemand::spawner().spawn("...");
20//!
21//! bridge.send_input(2);
22//!
23//! assert_eq!(bridge.next().await, Some(4));
24//! assert_eq!(bridge.next().await, None);
25//! # };
26//! ```
27
28mod bridge;
29mod messages;
30mod registrar;
31mod scope;
32mod spawner;
33mod traits;
34mod worker;
35
36pub use bridge::{ReactorBridge, ReactorBridgeSinkError};
37pub use registrar::ReactorRegistrar;
38pub use scope::{ReactorScope, ReactorScoped};
39pub use spawner::ReactorSpawner;
40pub use traits::Reactor;
41
42/// Creates a reactor worker.
43///
44/// See [module level documentation](self) for more information.
45#[doc(inline)]
46#[cfg(feature = "futures")]
47pub use gloo_worker_macros::reactor;