Circulate

crate version Live Build Status Documentation for <code>main</code> branch

Circulate is a lightweight PubSub framework that supports both async and non-async code. This project is written for BonsaiDb. While BonsaiDb's async relies upon tokio, this crate is runtime agnostic thanks to the excellent crate flume.

Async Example

```rust let relay = Relay::default(); let subscriber = relay.create_subscriber();

subscriber.subscribe_to(&"some topic")?;

relay.publish(&"some topic", &AnySerializableType)?;

let message = subscriber.receiver().recv_async().await?; println!( "Received message on topic {}: {:?}", message.topic::()?, message.payload::()? ); ```

Sync Example

```rust let relay = Relay::default(); let subscriber = relay.create_subscriber();

subscriber.subscribe_to(&"some topic")?;

relay.publish(&"some topic", &AnySerializableType)?;

let message = subscriber.receiver().recv()?; println!( "Received message on topic {}: {:?}", message.topic::()?, message.payload::()? ); ```

Open-source Licenses

This project, like all projects from Khonsu Labs, are open-source. This repository is available under the MIT License or the Apache License 2.0.

To learn more about contributing, please see CONTRIBUTING.md.