async-watch-once

[ crates.io | docs.rs ]

This crate provides a shareable container OnceWatch<T> in Rust, which value is set once. The readers wait in asynchronous manner until the value is ready.

```rust use asynconcewatch::OnceWatch; use asyncstd::task::{sleep, spawn}; use oncecell::sync::Lazy; use std::time::Duration;

static STATE: Lazy> = Lazy::new(OnceWatch::new); let secret = 10;

/* Writer */ spawn(async move { sleep(Duration::from_millis(500)).await;

// First write is fine
let ok = STATE.set(secret).is_ok();
assert!(ok);

// Second write is not allowed
let ok = STATE.set(secret).is_ok();
assert!(!ok);

});

/* Reader */ spawn(async move { let received = *STATE.get().await; assert_eq!(received, secret); }); ```

License

MIT license. See license file.