use std::fmt::Debug;
use crate::Dest;
use crate::ExitReason;
use crate::Message;
use crate::Node;
use crate::Pid;
use crate::Reference;
use crate::SystemMessage;
pub enum ProcessItem {
UserRemoteMessage(Vec<u8>),
UserLocalMessage(Box<dyn std::any::Any + Send>),
SystemMessage(SystemMessage),
MonitorProcessDown(Dest, Reference, ExitReason),
MonitorNodeDown(Node, Reference),
MonitorProcessUpdate(Reference, Pid),
AliasDeactivated(u64),
}
impl From<SystemMessage> for ProcessItem {
fn from(value: SystemMessage) -> Self {
Self::SystemMessage(value)
}
}
impl<T> From<Message<T>> for ProcessItem
where
T: Send + 'static,
{
fn from(value: Message<T>) -> Self {
match value {
Message::User(user) => Self::UserLocalMessage(Box::new(user)),
Message::System(system) => Self::SystemMessage(system),
}
}
}
impl Debug for ProcessItem {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::UserRemoteMessage(_) => write!(f, "UserRemoteMessage(..)"),
Self::UserLocalMessage(_) => write!(f, "UserLocalMessage(..)"),
Self::SystemMessage(system) => write!(f, "SystemMessage({:?})", system),
Self::MonitorProcessDown(dest, reference, exit_reason) => write!(
f,
"MonitorProcessDown({:?}, {:?}, {:?})",
dest, reference, exit_reason
),
Self::MonitorNodeDown(node, reference) => {
write!(f, "MonitorNodeDown({:?}, {:?})", node, reference)
}
Self::MonitorProcessUpdate(reference, process) => {
write!(f, "MonitorProcessUpdate({:?}, {:?})", reference, process)
}
Self::AliasDeactivated(alias) => write!(f, "AliasDeactivated({:?})", alias),
}
}
}