Restructure the entire editor codebase to consistently match the message hierarchy

Closes #744
This commit is contained in:
Keavon Chambers
2022-08-05 17:13:43 -07:00
parent 9e1f4eb46d
commit ddfd7db0a0
154 changed files with 4199 additions and 4064 deletions
@@ -0,0 +1,11 @@
use crate::messages::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize, Hash)]
#[impl_message(Message, BroadcastMessage, TriggerEvent)]
pub enum BroadcastEvent {
DocumentIsDirty,
ToolAbort,
SelectionChanged,
}
@@ -0,0 +1,23 @@
use crate::messages::prelude::*;
use serde::{Deserialize, Serialize};
#[remain::sorted]
#[impl_message(Message, Broadcast)]
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
pub enum BroadcastMessage {
// Sub-messages
#[remain::unsorted]
#[child]
TriggerEvent(BroadcastEvent),
// Messages
SubscribeEvent {
on: BroadcastEvent,
send: Box<Message>,
},
UnsubscribeEvent {
on: BroadcastEvent,
message: Box<Message>,
},
}
@@ -0,0 +1,32 @@
use crate::messages::prelude::*;
use std::collections::HashMap;
#[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![]
}
}
+9
View File
@@ -0,0 +1,9 @@
mod broadcast_message;
mod broadcast_message_handler;
pub mod broadcast_event;
#[doc(inline)]
pub use broadcast_message::{BroadcastMessage, BroadcastMessageDiscriminant};
#[doc(inline)]
pub use broadcast_message_handler::BroadcastMessageHandler;