use error::InterfaceError;
use messages::{Request, UserMessage};
use routing_table::Authority;
use std::fmt::{self, Debug, Formatter};
use std::sync::mpsc::Sender;
use xor_name::XorName;
#[derive(Clone)]
#[cfg_attr(feature="cargo-clippy", allow(large_enum_variant))]
pub enum Action {
NodeSendMessage {
src: Authority<XorName>,
dst: Authority<XorName>,
content: UserMessage,
priority: u8,
result_tx: Sender<Result<(), InterfaceError>>,
},
ClientSendRequest {
content: Request,
dst: Authority<XorName>,
priority: u8,
result_tx: Sender<Result<(), InterfaceError>>,
},
Name { result_tx: Sender<XorName> },
Timeout(u64),
Terminate,
}
impl Debug for Action {
fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
match *self {
Action::NodeSendMessage { ref content, .. } => {
write!(formatter,
"Action::NodeSendMessage {{ {:?}, result_tx }}",
content)
}
Action::ClientSendRequest { ref content, ref dst, .. } => {
write!(formatter,
"Action::ClientSendRequest {{ {:?}, dst: {:?}, result_tx }}",
content,
dst)
}
Action::Name { .. } => write!(formatter, "Action::Name"),
Action::Timeout(token) => write!(formatter, "Action::Timeout({})", token),
Action::Terminate => write!(formatter, "Action::Terminate"),
}
}
}