use std::fmt::{self, Debug, Formatter};
use std::sync::mpsc::Sender;
use authority::Authority;
use error::InterfaceError;
use messages::{Request, UserMessage};
use xor_name::XorName;
#[derive(Clone)]
pub enum Action {
NodeSendMessage {
src: Authority,
dst: Authority,
content: UserMessage,
priority: u8,
result_tx: Sender<Result<(), InterfaceError>>,
},
ClientSendRequest {
content: Request,
dst: Authority,
priority: u8,
result_tx: Sender<Result<(), InterfaceError>>,
},
CloseGroup {
name: XorName,
result_tx: Sender<Option<Vec<XorName>>>,
},
Name {
result_tx: Sender<XorName>,
},
QuorumSize {
result_tx: Sender<usize>,
},
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::CloseGroup { .. } => write!(formatter, "Action::CloseGroup"),
Action::Name { .. } => write!(formatter, "Action::Name"),
Action::QuorumSize { .. } => write!(formatter, "Action::QuorumSize"),
Action::Timeout(token) => write!(formatter, "Action::Timeout({})", token),
Action::Terminate => write!(formatter, "Action::Terminate"),
}
}
}