//! In-memory message broker. Phase 3 replaces this with a sqlite-backed store. use std::collections::{HashMap, VecDeque}; use std::sync::Mutex; use hive_sh4re::Message; #[derive(Default)] pub struct Broker { queues: Mutex>>, } impl Broker { pub fn new() -> Self { Self::default() } pub fn send(&self, message: Message) { let mut queues = self.queues.lock().unwrap(); queues .entry(message.to.clone()) .or_default() .push_back(message); } pub fn recv(&self, recipient: &str) -> Option { let mut queues = self.queues.lock().unwrap(); queues.get_mut(recipient).and_then(|q| q.pop_front()) } }