use std::marker::PhantomData;
use super::super::{Common, NextState, RoleState};
use super::{Follower, FollowerIdle};
use message::Message;
use {Io, Result};
pub struct FollowerSnapshot<IO: Io> {
_phantom: PhantomData<IO>,
}
impl<IO: Io> FollowerSnapshot<IO> {
pub fn new() -> Self {
FollowerSnapshot {
_phantom: PhantomData,
}
}
pub fn handle_message(
&mut self,
common: &mut Common<IO>,
message: Message,
) -> Result<NextState<IO>> {
if let Message::AppendEntriesCall(m) = message {
common.rpc_callee(&m.header).reply_busy();
}
Ok(None)
}
pub fn run_once(&mut self, common: &mut Common<IO>) -> Result<NextState<IO>> {
if common.is_snapshot_installing() {
Ok(None)
} else {
let next = Follower::Idle(FollowerIdle::new());
Ok(Some(RoleState::Follower(next)))
}
}
}