use std::marker::PhantomData;
use tokio::sync::broadcast;
pub trait OxideEventChannel {
type Events: Clone + Send + 'static;
}
pub struct EventChannelRuntime<Events> {
tx: broadcast::Sender<Events>,
_marker: PhantomData<Events>,
}
impl<Events> EventChannelRuntime<Events>
where
Events: Clone + Send + 'static,
{
pub fn new(buffer: usize) -> Self {
let (tx, _) = broadcast::channel(buffer);
Self {
tx,
_marker: PhantomData,
}
}
pub fn emit(&self, event: Events) {
let _ = self.tx.send(event);
}
pub fn subscribe(&self) -> broadcast::Receiver<Events> {
self.tx.subscribe()
}
}