use std::path::PathBuf;
use tokio::sync::broadcast::Receiver;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Event {
Reload(PathBuf),
BridgeReady,
}
#[allow(clippy::module_name_repetitions)]
pub async fn wait_for_event_and_match<F, O>(mut receiver: Receiver<Event>, f: F) -> O
where
F: Fn(Event) -> Option<O>,
{
loop {
if let Ok(value) = receiver.recv().await {
if let Some(result) = f(value) {
break result;
}
}
}
}
#[allow(clippy::module_name_repetitions)]
pub async fn wait_for_event<F>(receiver: Receiver<Event>, f: F)
where
F: Fn(&Event) -> bool,
{
wait_for_event_and_match(receiver, |event| if f(&event) { Some(()) } else { None }).await;
}