use std::fmt;
use display_more::DisplayOptionExt;
use crate::RaftTypeConfig;
use crate::raft_state::io_state::IOId;
use crate::type_config::alias::CommittedVoteOf;
use crate::type_config::alias::LeaderIdOf;
use crate::type_config::alias::LogIdOf;
use crate::vote::RaftVote;
#[derive(Debug, Clone)]
#[derive(PartialEq, Eq)]
#[derive(PartialOrd, Ord)]
pub(crate) struct LogIOId<C>
where C: RaftTypeConfig
{
pub(crate) committed_vote: CommittedVoteOf<C>,
pub(crate) log_id: Option<LogIdOf<C>>,
}
impl<C> fmt::Display for LogIOId<C>
where C: RaftTypeConfig
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "by:{}, {}", self.committed_vote, self.log_id.display())
}
}
impl<C> LogIOId<C>
where C: RaftTypeConfig
{
pub(crate) fn new(committed_vote: CommittedVoteOf<C>, log_id: Option<LogIdOf<C>>) -> Self {
Self { committed_vote, log_id }
}
#[allow(dead_code)]
pub(crate) fn committed_vote(&self) -> &CommittedVoteOf<C> {
&self.committed_vote
}
pub(crate) fn to_committed_vote(&self) -> CommittedVoteOf<C> {
self.committed_vote.clone()
}
pub(crate) fn leader_id(&self) -> &LeaderIdOf<C> {
self.committed_vote.leader_id()
}
pub(crate) fn last_log_id(&self) -> Option<&LogIdOf<C>> {
self.log_id.as_ref()
}
pub(crate) fn to_io_id(&self) -> IOId<C> {
IOId::Log(self.clone())
}
}