tokio-messaging

repository build crate license

A crate which offers non-blocking publish/subscribe functionality using Tokio channels. Publishing messages and subscribing to them is done using an `Messaging` instance, which acts as a message broker. In order to create a message broker, start by defining the structure of messages and their data (payload). The types should implement `Message` and `MessageData` respectively. ```rust enum MyMessage { Greeting, Request } impl Message for MyMessage {} #[derive(Clone, Copy, Debug, PartialEq, Eq)] struct MyPayload(&'static str); impl MessageData for MyPayload {} ``` Next, create the message broker instance. Usually, you'll have a single, long-living instance. ```rust lazy_static! { static ref INSTANCE: Messaging = { Messaging::new() }; } pub fn messaging() -> &'static Messaging { &INSTANCE } ``` Publish messages using the `dispatch()` function and subscribe to them using the `on()` function. ```rust // Subscribe to messages tokio::spawn(messaging().on(MyMessage::Request, |data: MyPayload| { assert_eq!(data.0, "Here's a request!"); })); // Publish a message messaging().dispatch(MyMessage::Request, MyPayload("Here's a request!")); ```