use crate::Event;
pub type MiddlewareFunction = Box<dyn Fn(&dyn Event) -> bool + Send + Sync>;
pub struct MiddlewareManager {
middleware: Vec<MiddlewareFunction>,
}
impl std::fmt::Debug for MiddlewareManager {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("MiddlewareManager")
.field("middleware_count", &self.middleware.len())
.finish()
}
}
impl Default for MiddlewareManager {
fn default() -> Self {
Self::new()
}
}
impl MiddlewareManager {
pub fn new() -> Self {
Self {
middleware: Vec::new(),
}
}
pub fn add<F>(&mut self, middleware: F)
where
F: Fn(&dyn Event) -> bool + Send + Sync + 'static,
{
self.middleware.push(Box::new(middleware));
}
pub fn process(&self, event: &dyn Event) -> bool {
self.middleware.iter().all(|m| m(event))
}
pub fn count(&self) -> usize {
self.middleware.len()
}
pub fn clear(&mut self) {
self.middleware.clear();
}
}