Skip to content

usagi-flow/tokio-messaging

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

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.

lazy_static! {
	static ref INSTANCE: Messaging<MyMessage, MyPayload> = { Messaging::new() };
}

pub fn messaging() -> &'static Messaging<MyMessage, MyPayload> { &INSTANCE }

Publish messages using the dispatch() function and subscribe to them using the on() function.

// 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!"));

About

Publish/subscribe functionality using Tokio channels

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages