picopub

Crates.iopicopub
lib.rspicopub
version0.1.1
created_at2026-01-14 18:38:23.862507+00
updated_at2026-01-14 18:43:46.513296+00
descriptionA sync/async pub-sub library with bounded queues and backpressure using Mutex and Condvar
homepage
repositoryhttps://github.com/alejandro-llanes/picopub
max_upload_size
id2043429
size33,831
Alejandro Llanes (alejandro-llanes)

documentation

https://docs.rs/picopub

README

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());
Commit count: 6

cargo fmt