use eventfold::{Event, EventWriter, WaitResult};
use serde_json::json;
use std::thread;
use std::time::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let dir = tempfile::tempdir()?;
let mut writer = EventWriter::open(dir.path())?;
let reader = writer.reader();
let handle = thread::spawn(move || {
for i in 0..10 {
thread::sleep(Duration::from_millis(200));
writer
.append(&Event::new("tick", json!({"i": i})))
.unwrap();
println!("[writer] appended tick {i}");
}
});
let mut offset = 0u64;
let mut seen = 0usize;
while seen < 10 {
match reader.wait_for_events(offset, Duration::from_secs(5))? {
WaitResult::NewData(_new_size) => {
for result in reader.read_from(offset)? {
let (event, next_offset, _hash) = result?;
let i = event.data["i"].as_u64().unwrap();
println!("[reader] saw tick {i}");
offset = next_offset;
seen += 1;
}
}
WaitResult::Timeout => {
println!("[reader] timeout — no new events in 5s");
}
}
}
handle.join().unwrap();
println!("\nDone — processed {seen} events via blocking tail.");
Ok(())
}