use tokio::sync::watch;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ReadinessPolicy {
Immediate,
Explicit,
}
impl ReadinessPolicy {
pub fn is_immediate(self) -> bool {
matches!(self, Self::Immediate)
}
}
#[derive(Debug, Clone)]
pub struct ReadySignal {
sender: watch::Sender<bool>,
}
impl ReadySignal {
pub fn new() -> (Self, watch::Receiver<bool>) {
let (sender, receiver) = watch::channel(false);
(Self { sender }, receiver)
}
pub fn mark_ready(&self) {
let _ignored = self.sender.send(true);
}
pub fn subscribe(&self) -> watch::Receiver<bool> {
self.sender.subscribe()
}
}