Crate pubsub_rs

Source
Expand description

A publish-subscribe system for Rust with async/await support.

This crate provides a simple yet powerful publish-subscribe (pubsub) system that allows multiple subscribers to receive messages published to specific topics. It’s designed to be:

  • Thread-safe: Uses Arc and DashMap for concurrent access
  • Async-friendly: Built with async/await support using async-channel
  • Memory efficient: Uses weak references to prevent memory leaks
  • Clean shutdown: Automatically cleans up resources when dropped

§Features

  • Multiple subscribers per topic
  • Multiple topics per subscriber
  • Thread-safe operations
  • Async message delivery
  • Automatic cleanup of dropped subscribers
  • Graceful shutdown handling

§Basic Usage

use pubsub_rs::{Pubsub, PubsubError};

#[tokio::main]
async fn main() {
    let pubsub = Pubsub::new();

    // Subscribe to topics
    let subscriber = pubsub.subscribe(vec!["topic1", "topic2"]).await;

    // Publish messages
    pubsub.publish("topic1", "Hello".to_owned()).await;

    // Receive messages
    let (topic, message) = subscriber.recv().await.unwrap();
    assert_eq!(topic, "topic1");
    assert_eq!(message, "Hello");
}

§Error Handling

The main error type is PubsubError, which occurs when:

  • The pubsub system has been closed
  • A subscriber tries to receive messages after the pubsub system is dropped

§Performance Considerations

  • Uses DashMap for concurrent topic storage
  • Each subscriber has its own async channel
  • Message delivery is non-blocking
  • Automatic cleanup of dropped subscribers

§Safety

  • All operations are thread-safe
  • Uses Arc for shared ownership
  • Uses Weak references to prevent memory leaks
  • Proper cleanup on drop

§Examples

See the tests module for more comprehensive usage examples.

Structs§

Pubsub
A publish-subscribe system that allows multiple subscribers to receive messages published to specific topics.
PubsubError
Error type returned when a Pubsub operation fails.
Subscriber
A subscriber that receives messages for subscribed topics from a Pubsub system.

Traits§

PubsubTopic
A trait that defines the requirements for types that can be used as Pubsub topics.