use std::{any::Any, fmt::Debug};
use crate::{Event, Lock, Lockable, SendSync, Sendable, Shared};
pub trait EventSender: Sendable + 'static {
fn send_event(&mut self, event: Event);
}
#[derive(Clone)]
pub struct EventSink {
sender: Shared<Lock<dyn EventSender>>,
}
impl EventSink {
pub fn new(sender: impl EventSender) -> Self {
Self {
sender: Shared::new(Lock::new(sender)),
}
}
pub fn send(&self, event: impl Any + SendSync) {
self.sender.lock_mut().send_event(Event::new(event));
}
}
impl Debug for EventSink {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("EventSink").finish()
}
}