hyperlane_broadcast/broadcast_map/
impl.rs1use crate::*;
2
3impl<T: Clone + Debug> BroadcastMapTrait for T {}
4
5impl<'a, T: BroadcastMapTrait> Default for BroadcastMap<'a, T> {
6 fn default() -> Self {
7 BroadcastMap {
8 capacity: DashMap::new(),
9 sender: DashMap::new(),
10 }
11 }
12}
13
14impl<'a, T: BroadcastMapTrait> BroadcastMap<'a, T> {
15 pub fn new(key: &'a str, capacity: usize) -> Self {
16 let sender: BroadcastSender<T> = BroadcastSender::new(capacity);
17 let broadcast: BroadcastMap<T> = BroadcastMap::default();
18 let sender_map: &DashMap<&str, Sender<T>> = broadcast.get_sender();
19 let capacity_map: &DashMap<&str, usize> = broadcast.get_capacity();
20 sender_map.insert(key, sender);
21 capacity_map.insert(key, capacity);
22 broadcast
23 }
24
25 pub fn receiver_count(&self, key: &'a str) -> OptionReceiverCount {
26 self.get_sender()
27 .get(key)
28 .map(|receiver| receiver.receiver_count())
29 }
30
31 pub fn subscribe(&self, key: &'a str) -> OptionBroadcastMapReceiver<T> {
32 self.get_sender()
33 .get(key)
34 .map(|receiver| receiver.subscribe())
35 }
36
37 pub fn send(&self, key: &'a str, data: T) -> BroadcastMapSendResult<T> {
38 match self.get_sender().get(key) {
39 Some(sender) => sender.send(data).map(|result| Some(result)),
40 None => Ok(None),
41 }
42 }
43}