mod broadcaster;
use std::sync::Arc;
use tokio::sync::mpsc;
pub use broadcaster::Broadcaster;
pub trait Topic<T>: Clone + Send + Sync + 'static {
fn subscribe(self, name: impl Into<String>) -> (u32, mpsc::Receiver<Arc<T>>);
fn unsubscribe(self, name: impl AsRef<str>, id: u32) -> Option<u32>;
fn publish(self, name: impl Into<String>, value: Arc<T>);
}
pub trait TopicId {
fn get_topic_id(&self) -> String;
}