use core::any::{Any, TypeId};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub(crate) enum Topic {
BuiltinEvent(BuiltinEvent),
PublicMessage(TypeId),
PrivateMessage(TypeId),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub(crate) enum BuiltinEvent {
Enter,
Leave,
}
impl Topic {
pub(crate) fn enter() -> Self {
Self::BuiltinEvent(BuiltinEvent::Enter)
}
pub(crate) fn leave() -> Self {
Self::BuiltinEvent(BuiltinEvent::Leave)
}
pub(crate) fn public_message<T: Any>() -> Self {
Self::PublicMessage(TypeId::of::<T>())
}
pub(crate) fn private_message<T: Any>() -> Self {
Self::PrivateMessage(TypeId::of::<T>())
}
pub(crate) fn unqiue_per_activity(&self) -> bool {
match self {
Self::BuiltinEvent(_) | Self::PublicMessage(_) => false,
Self::PrivateMessage(_) => true,
}
}
}