use crate::message::ProtocolMessage;
use crate::Event;
#[derive(Debug, PartialEq, Eq)]
pub enum Action<T> {
Send {
destination: T,
message: ProtocolMessage<T>,
},
Disconnect {
node: T,
},
Notify {
event: Event<T>,
},
}
impl<T> Action<T> {
pub(crate) fn send(destination: T, message: ProtocolMessage<T>) -> Self {
Action::Send {
destination,
message,
}
}
pub(crate) fn disconnect(node: T) -> Self {
Action::Disconnect { node }
}
pub(crate) fn notify_up(node: T) -> Self {
Action::Notify {
event: Event::NeighborUp { node },
}
}
pub(crate) fn notify_down(node: T) -> Self {
Action::Notify {
event: Event::NeighborDown { node },
}
}
}