use messages::{Request, Response};
use routing_table::{Prefix, RoutingTable};
use routing_table::Authority;
use std::fmt::{self, Debug, Formatter};
use xor_name::XorName;
#[derive(Clone, Eq, PartialEq)]
pub enum Event {
Request {
request: Request,
src: Authority<XorName>,
dst: Authority<XorName>,
},
Response {
response: Response,
src: Authority<XorName>,
dst: Authority<XorName>,
},
NodeAdded(XorName, RoutingTable<XorName>),
NodeLost(XorName, RoutingTable<XorName>),
SectionSplit(Prefix<XorName>),
SectionMerge(Prefix<XorName>),
Connected,
RestartRequired,
Terminate,
Tick,
}
impl Debug for Event {
fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
match *self {
Event::Request { ref request, ref src, ref dst } => {
write!(formatter,
"Event::Request {{ request: {:?}, src: {:?}, dst: {:?} }}",
request,
src,
dst)
}
Event::Response { ref response, ref src, ref dst } => {
write!(formatter,
"Event::Response {{ response: {:?}, src: {:?}, dst: {:?} }}",
response,
src,
dst)
}
Event::NodeAdded(ref node_name, _) => {
write!(formatter,
"Event::NodeAdded({:?}, routing_table)",
node_name)
}
Event::NodeLost(ref node_name, _) => {
write!(formatter, "Event::NodeLost({:?}, routing_table)", node_name)
}
Event::SectionSplit(ref prefix) => {
write!(formatter, "Event::SectionSplit({:?})", prefix)
}
Event::SectionMerge(ref prefix) => {
write!(formatter, "Event::SectionMerge({:?})", prefix)
}
Event::Connected => write!(formatter, "Event::Connected"),
Event::RestartRequired => write!(formatter, "Event::RestartRequired"),
Event::Terminate => write!(formatter, "Event::Terminate"),
Event::Tick => write!(formatter, "Event::Tick"),
}
}
}