use qubit_function::Consumer;
use crate::observability::CasAlert;
use super::{CasAlertHook, CasEvent, CasEventHook};
#[derive(Clone)]
pub struct CasHooks {
on_event: Option<CasEventHook>,
on_alert: Option<CasAlertHook>,
}
impl Default for CasHooks {
#[inline]
fn default() -> Self {
Self {
on_event: None,
on_alert: None,
}
}
}
impl CasHooks {
#[inline]
pub fn new() -> Self {
Self::default()
}
pub fn on_event<C>(mut self, hook: C) -> Self
where
C: Consumer<CasEvent> + Send + Sync + 'static,
{
self.on_event = Some(hook.into_arc());
self
}
pub fn on_alert<C>(mut self, hook: C) -> Self
where
C: Consumer<CasAlert> + Send + Sync + 'static,
{
self.on_alert = Some(hook.into_arc());
self
}
#[inline]
pub(crate) fn event_hook(&self) -> Option<CasEventHook> {
self.on_event.clone()
}
#[inline]
pub(crate) fn alert_hook(&self) -> Option<CasAlertHook> {
self.on_alert.clone()
}
}