dbuff 0.1.0

Double-buffered state with async command chains, streaming, and keyed task pools for ratatui applications
Documentation
use dbuff::*;
use std::time::Duration;

#[derive(Debug, Clone, Default)]
struct AppData {
    items: Vec<i32>,
}

#[tokio::main]
async fn main() {
    let (domain, write_handle) = SharedDomainData::with_coalesce(
        AppData::default(),
        Duration::from_millis(1),
    );
    tokio::spawn(write_handle.run());

    // These all arrive within the coalesce window → single batch
    for i in 0..100 {
        domain.modify(move |data| {
            data.items.push(i);
        });
    }

    tokio::time::sleep(Duration::from_millis(10)).await;

    let guard = domain.read();
    assert_eq!(guard.items.len(), 100);
    println!("items: {:?}", &guard.items[..10]);
}