Files
Graphite/editor/src/messages/broadcast/broadcast_message_handler.rs
2022-08-05 17:12:56 -07:00

31 lines
899 B
Rust

use crate::messages::prelude::*;
#[derive(Debug, Clone, Default)]
pub struct BroadcastMessageHandler {
listeners: HashMap<BroadcastEvent, Vec<Message>>,
}
impl MessageHandler<BroadcastMessage, ()> for BroadcastMessageHandler {
#[remain::check]
fn process_message(&mut self, message: BroadcastMessage, _data: (), responses: &mut VecDeque<Message>) {
#[remain::sorted]
match message {
// Sub-messages
#[remain::unsorted]
BroadcastMessage::TriggerEvent(event) => {
for message in self.listeners.entry(event).or_default() {
responses.push_front(message.clone())
}
}
// Messages
BroadcastMessage::SubscribeEvent { on, send } => self.listeners.entry(on).or_default().push(*send),
BroadcastMessage::UnsubscribeEvent { on, message } => self.listeners.entry(on).or_default().retain(|msg| *msg != *message),
}
}
fn actions(&self) -> ActionList {
vec![]
}
}