use std::{
error::Error,
sync::atomic::{AtomicU32, Ordering},
};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use with_daemon::with_daemon;
fn main() -> Result<(), Box<dyn Error>> {
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("off")).init();
let result = with_daemon(
"/tmp/with_daemon__example_counter.pid",
"/tmp/with_daemon__example_counter.sock",
|_| async { Result::<_, String>::Ok(AtomicU32::new(0)) },
|state, mut stream| async move {
let previous = state.fetch_add(1, Ordering::SeqCst);
let _ = stream.write_u32(previous).await;
},
|mut stream| async move { stream.read_u32().await },
)?;
println!("result: {}", result?);
Ok(())
}