picopub 0.1.1

A sync/async pub-sub library with bounded queues and backpressure using Mutex and Condvar
Documentation

PicoPub

A synchronous pub-sub library built on Mutex and Condvar, with per-subscriber bounded queues and configurable backpressure.

Features

  • Sync/Async runtime
  • No channels
  • Per-subscriber backpressure
  • Zero-copy fan-out using Arc

Non-goals

  • Lock-free algorithms
  • Network transport

Example

use picopub::PicoPub;

let ps = PicoPub::<String, u32>::new();
let sub = ps.subscribe(String::from("counters"), Some(2)).await;
let nums = vec![1, 1];

let _ = tokio::join!({
    let nums = nums.clone();
    spawn(async move {
        for n in nums.iter() {
            ps.publish(String::from("counters"), n + 1).await;
        }
    })
});

let mut stream = sub.stream();

let n1 = stream.next().await.expect("early");
let n2 = stream.next().await.expect("early");

assert_eq!(n1, (nums[0] + 1).into());
assert_eq!(n2, (nums[1] + 1).into());