type Subscriber = Box<dyn Fn(&str, &str) + Send + Sync>;
#[derive(Default)]
pub struct Notifications {
subscribers: Vec<(String, Subscriber)>,
}
impl Notifications {
pub fn new() -> Self {
Self::default()
}
pub fn subscribe(
&mut self,
prefix: &str,
handler: impl Fn(&str, &str) + Send + Sync + 'static,
) {
self.subscribers
.push((prefix.to_string(), Box::new(handler)));
}
pub fn instrument(&self, name: &str, payload: &str) {
for (prefix, handler) in &self.subscribers {
if name.starts_with(prefix.as_str()) {
handler(name, payload);
}
}
}
}