use futures::Future;
use election::{Ballot, Role};
use log::{Log, LogIndex, LogPrefix, LogSuffix};
use message::Message;
use {Error, Result};
pub trait Io {
type SaveBallot: Future<Item = (), Error = Error>;
type LoadBallot: Future<Item = Option<Ballot>, Error = Error>;
type SaveLog: Future<Item = (), Error = Error>;
type LoadLog: Future<Item = Log, Error = Error>;
type Timeout: Future<Item = (), Error = Error>;
fn try_recv_message(&mut self) -> Result<Option<Message>>;
fn send_message(&mut self, message: Message);
fn save_ballot(&mut self, ballot: Ballot) -> Self::SaveBallot;
fn load_ballot(&mut self) -> Self::LoadBallot;
fn save_log_prefix(&mut self, prefix: LogPrefix) -> Self::SaveLog;
fn save_log_suffix(&mut self, suffix: &LogSuffix) -> Self::SaveLog;
fn load_log(&mut self, start: LogIndex, end: Option<LogIndex>) -> Self::LoadLog;
fn create_timeout(&mut self, role: Role) -> Self::Timeout;
fn is_busy(&mut self) -> bool {
false
}
}