use super::{DocumentEvent, EventFilter};
use crate::core::Result;
pub trait EventHandler: Send + Sync {
fn handle_event(&mut self, event: &DocumentEvent) -> Result<()>;
fn event_filter(&self) -> EventFilter {
EventFilter::new()
}
fn priority(&self) -> i32 {
0
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EventStats {
pub events_dispatched: usize,
pub handlers_count: usize,
pub events_filtered: usize,
pub async_events_queued: usize,
pub avg_processing_time_us: u64,
}
#[derive(Debug, Clone)]
pub struct EventChannelConfig {
pub max_handlers: usize,
pub max_async_queue_size: usize,
pub enable_batching: bool,
pub max_batch_size: usize,
pub enable_logging: bool,
}
impl Default for EventChannelConfig {
fn default() -> Self {
Self {
max_handlers: 100,
max_async_queue_size: 1000,
enable_batching: false,
max_batch_size: 10,
enable_logging: false,
}
}
}