event_bus_rs

Crates.ioevent_bus_rs
lib.rsevent_bus_rs
version0.1.6
created_at2025-11-28 13:53:06.447239+00
updated_at2025-12-05 02:12:39.845772+00
descriptionA runtime-agnostic, async, and thread-safe event bus for Rust.
homepagehttps://github.com/JasterV/event_bus.rs
repositoryhttps://github.com/JasterV/event_bus.rs
max_upload_size
id1955331
size48,149
Víctor Martínez (JasterV)

documentation

README

event_bus.rs

Crate Version: event_bus_rs

A runtime-agnostic, async, and thread-safe event bus for Rust. Designed to be efficient, simple, and easy to use, allowing you to publish and subscribe to messages across threads and async tasks.


Features

  • Runtime-agnostic: works with any async runtime (Tokio, async-std, smol, etc.)
  • Thread-safe: multiple publishers and subscribers can safely coexist
  • Async & Stream-based: subscribers implement futures::Stream
  • Automatic cleanup: topics are removed when the last subscriber drops
  • Minimal & simple API: just EventBus::subscribe and EventBus::publish

Topic capacity

The EventBus is build on top of bounded channels, which means that each time a topic is created, we need to specify a capacity.

The default one is set to an arbitrary value which is available and documented in the docs.

To know more about how the bounded channels work, check async_broadcast


Installation

Add to your Cargo.toml:

[dependencies]
event_bus_rs = "0.1.0"
futures = "0.3"

Usage Example

use event_bus_rs::EventBus;
use futures::StreamExt;

#[tokio::main]
async fn main() {
    let bus = EventBus::new_with_topic_capacity(50);

    // Subscribe to a topic
    let mut sub = bus.subscribe("my_topic");

    // Spawn a subscriber task
    tokio::spawn(async move {
        while let Some(msg) = sub.next().await {
            println!("Received: {}", String::from_utf8_lossy(&msg));
        }
    });

    // Publish a message
    bus.publish("my_topic", b"Hello, EventBus!").unwrap();
}

Notes:

  • Messages are published as &[u8]; encoding/decoding is the user's responsibility.
  • Multiple subscribers to the same topic each get a copy of every message.
  • When all subscribers of a topic are dropped, the topic is automatically cleaned up.

API Overview

  • EventBus::new() -> EventBus – create a new bus
  • EventBus::new_with_topic_capacity() -> EventBus - create a new but with a configure topic capacity
  • EventBus::subscribe(&self, topic: &str) -> Subscription – subscribe to a topic
  • EventBus::publish(&self, topic: &str, data: &[u8]) -> Result<(), PublishError> – publish a message
  • Subscription implements futures::Stream<Item = Arc<[u8]>>

License

MIT OR Apache-2.0

Commit count: 0

cargo fmt