axum_server/
notify_once.rs
use std::sync::atomic::{AtomicBool, Ordering};
use tokio::sync::Notify;
#[derive(Debug, Default)]
pub(crate) struct NotifyOnce {
notified: AtomicBool,
notify: Notify,
}
impl NotifyOnce {
pub(crate) fn notify_waiters(&self) {
self.notified.store(true, Ordering::SeqCst);
self.notify.notify_waiters();
}
pub(crate) fn is_notified(&self) -> bool {
self.notified.load(Ordering::SeqCst)
}
pub(crate) async fn notified(&self) {
let future = self.notify.notified();
if !self.notified.load(Ordering::SeqCst) {
future.await;
}
}
}