use super::SubscriberId;
use std::collections::HashMap;
#[derive(Debug)]
pub(crate) struct Subscribers<T> {
subscribers: HashMap<SubscriberId, T>,
next_id: u64,
}
impl<T> Subscribers<T> {
pub(crate) fn new() -> Self {
Subscribers {
subscribers: HashMap::new(),
next_id: 1,
}
}
pub(crate) fn add(&mut self, subscriber: T) -> SubscriberId {
let id = SubscriberId(self.next_id);
self.next_id += 1;
self.subscribers.insert(id, subscriber);
id
}
pub(crate) fn remove(&mut self, subscriber_id: SubscriberId) -> Option<T> {
self.subscribers.remove(&subscriber_id)
}
pub(crate) fn contains(&mut self, subscriber_id: SubscriberId) -> bool {
self.subscribers.contains_key(&subscriber_id)
}
pub(crate) fn get_mut_unchecked(&mut self, subscriber_id: SubscriberId) -> &mut T {
self.subscribers.get_mut(&subscriber_id).unwrap()
}
}