bonds_core/manager/
hooks.rs1use super::*;
2
3impl BondManager {
5 pub fn register_hook<H>(&self, hook: H)
7 where
8 H: BondEventHook + 'static,
9 {
10 self.register_hook_arc(Arc::new(hook));
11 }
12
13 pub fn register_hook_arc(&self, hook: Arc<dyn BondEventHook>) {
15 if let Ok(mut hooks) = self.hooks.write() {
16 hooks.push(hook);
17 }
18 }
19
20 pub(super) fn emit_event(&self, payload: BondEventPayload) {
24 let hooks = match self.hooks.read() {
25 Ok(h) => h.clone(),
26 Err(_) => return,
28 };
29
30 if hooks.is_empty() {
31 return;
32 }
33
34 let event = BondEvent {
35 occurred_at: Utc::now(),
36 payload,
37 };
38
39 for hook in hooks {
40 hook.on_event(&event);
41 }
42 }
43}