use std::collections::BTreeSet;
use crate::RaftTypeConfig;
use crate::entry::RaftEntry;
use crate::type_config::alias::EntryOf;
use crate::type_config::alias::LogIdOf;
use crate::vote::RaftLeaderIdExt;
pub fn log_id<C>(term: u64, node_id: C::NodeId, index: u64) -> LogIdOf<C>
where
C: RaftTypeConfig,
C::Term: From<u64>,
{
LogIdOf::<C>::new(C::LeaderId::new_committed(term.into(), node_id), index)
}
pub fn blank_ent<C>(term: u64, node_id: C::NodeId, index: u64) -> EntryOf<C>
where
C: RaftTypeConfig,
C::Term: From<u64>,
{
EntryOf::<C>::new_blank(log_id::<C>(term, node_id, index))
}
pub fn membership_ent<C>(term: u64, node_id: C::NodeId, index: u64, config: Vec<BTreeSet<C::NodeId>>) -> EntryOf<C>
where
C: RaftTypeConfig,
C::Term: From<u64>,
C::Node: Default,
{
EntryOf::<C>::new_membership(
log_id::<C>(term, node_id, index),
crate::Membership::new_with_defaults(config, []),
)
}