use crate::eraftpb::HardState;
use crate::raft::{Raft, SoftState, StateRole};
use crate::storage::Storage;
use crate::ProgressTracker;
#[derive(Default)]
pub struct Status<'a> {
pub id: u64,
pub hs: HardState,
pub ss: SoftState,
pub applied: u64,
pub progress: Option<&'a ProgressTracker>,
}
impl<'a> Status<'a> {
pub fn new<T: Storage>(raft: &'a Raft<T>) -> Status<'a> {
let mut s = Status {
id: raft.id,
..Default::default()
};
s.hs = raft.hard_state();
s.ss = raft.soft_state();
s.applied = raft.raft_log.applied;
if s.ss.raft_state == StateRole::Leader {
s.progress = Some(raft.prs());
}
s
}
}