use crate::events::Event;
pub trait EventSink {
fn send(&self, e: Event);
}
impl<F> EventSink for F
where
F: Fn(Event),
{
fn send(&self, e: Event) {
(self)(e);
}
}
#[cfg(feature = "events")]
impl EventSink for std::rc::Rc<std::cell::RefCell<Vec<Event>>> {
fn send(&self, e: Event) {
if let Ok(mut v) = self.try_borrow_mut() {
v.push(e);
}
}
}
#[cfg(feature = "events")]
impl EventSink for crossbeam::channel::Sender<Event> {
fn send(&self, e: Event) {
let _ = crossbeam::channel::Sender::send(self, e);
}
}
#[cfg(feature = "events")]
impl<'a> EventSink for &'a crossbeam::channel::Sender<Event> {
fn send(&self, e: Event) {
let _ = crossbeam::channel::Sender::send(*self, e);
}
}