use super::*;
impl BondManager {
pub fn register_hook<H>(&self, hook: H)
where
H: BondEventHook + 'static,
{
self.register_hook_arc(Arc::new(hook));
}
pub fn register_hook_arc(&self, hook: Arc<dyn BondEventHook>) {
if let Ok(mut hooks) = self.hooks.write() {
hooks.push(hook);
}
}
pub(super) fn emit_event(&self, payload: BondEventPayload) {
let hooks = match self.hooks.read() {
Ok(h) => h.clone(),
Err(_) => return,
};
if hooks.is_empty() {
return;
}
let event = BondEvent {
occurred_at: Utc::now(),
payload,
};
for hook in hooks {
hook.on_event(&event);
}
}
}