| pub use crate::dispatcher::*; |
| use crate::messages::prelude::*; |
|
|
| |
| |
| |
| pub trait MessageHandler<M: ToDiscriminant, D> |
| where |
| M::Discriminant: AsMessage, |
| <M::Discriminant as TransitiveChild>::TopParent: TransitiveChild<Parent = <M::Discriminant as TransitiveChild>::TopParent, TopParent = <M::Discriminant as TransitiveChild>::TopParent> + AsMessage, |
| { |
| |
| fn process_message(&mut self, message: M, responses: &mut VecDeque<Message>, data: D); |
|
|
| fn actions(&self) -> ActionList; |
| } |
|
|
| pub type ActionList = Vec<Vec<MessageDiscriminant>>; |
|
|
| pub trait AsMessage: TransitiveChild |
| where |
| Self::TopParent: TransitiveChild<Parent = Self::TopParent, TopParent = Self::TopParent> + AsMessage, |
| { |
| fn local_name(self) -> String; |
| fn global_name(self) -> String { |
| <Self as Into<Self::TopParent>>::into(self).local_name() |
| } |
| } |
|
|
| |
| |
| pub trait MessageHandlerData {} |
|
|
| pub trait ToDiscriminant { |
| type Discriminant; |
|
|
| fn to_discriminant(&self) -> Self::Discriminant; |
| } |
|
|
| pub trait TransitiveChild: Into<Self::Parent> + Into<Self::TopParent> { |
| type TopParent; |
| type Parent; |
| } |
|
|
| pub trait Hint { |
| fn hints(&self) -> HashMap<String, String>; |
| } |
|
|