use crate::RaftTypeConfig;
use crate::raft::AppendEntriesResponse;
use crate::type_config::alias::LogIdOf;
use crate::type_config::alias::VoteOf;
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
pub(crate) enum RejectLeadership<C: RaftTypeConfig> {
#[error("reject leadership: local vote {0} is not less than the leader's")]
ByVote(VoteOf<C>),
#[allow(dead_code)]
#[error("reject leadership: local last-log-id {0:?} is not less than the leader's")]
ByLastLogId(Option<LogIdOf<C>>),
}
impl<C> From<RejectLeadership<C>> for AppendEntriesResponse<C>
where C: RaftTypeConfig
{
fn from(r: RejectLeadership<C>) -> Self {
match r {
RejectLeadership::ByVote(v) => AppendEntriesResponse::HigherVote(v),
RejectLeadership::ByLastLogId(_) => {
unreachable!("the leader should always has a greater last log id")
}
}
}
}