use super::peer::Peer;
use std::collections::BTreeMap;
use xor_name::{Prefix, XorName};
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub(crate) struct ElderCandidates {
prefix: Prefix,
elders: BTreeMap<XorName, Peer>,
}
impl ElderCandidates {
pub(crate) fn new(prefix: Prefix, elders: impl IntoIterator<Item = Peer>) -> Self {
Self {
prefix,
elders: elders.into_iter().map(|peer| (peer.name(), peer)).collect(),
}
}
pub(crate) fn prefix(&self) -> Prefix {
self.prefix
}
pub(crate) fn elders(&self) -> impl Iterator<Item = &Peer> + '_ {
self.elders.values()
}
pub(crate) fn names(&self) -> impl Iterator<Item = XorName> + '_ {
self.elders.keys().copied()
}
pub(crate) fn len(&self) -> usize {
self.elders.len()
}
pub(crate) fn contains(&self, name: &XorName) -> bool {
self.elders.contains_key(name)
}
}