use crate::inventory::Inventory;
use crate::utils::FrameSummaryC;
use crate::error::UnregisterMonitorErr;
use std::any::Any;
pub trait InventoryMonitor {
fn check(&self, inventory: &Inventory, frame_data: &FrameSummaryC);
fn as_any(&self) -> &dyn Any;
}
impl Inventory {
pub fn register_monitor(&self, monitor: Box<dyn InventoryMonitor>) -> usize {
let mut b = self.inventory_monitors.borrow_mut();
let key = b.keys().max().unwrap_or(&0) + 1;
b.insert(key, monitor);
return key;
}
pub fn unregister_monitor(&self, key: usize) -> Result<(), UnregisterMonitorErr> {
let mut b = self.inventory_monitors.borrow_mut();
if !b.contains_key(&key)
{
return Err(UnregisterMonitorErr::MonitorIdNotFound);
}
b.remove(&key);
return Ok(());
}
}