1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
mod candidates;
mod node_state;
mod peer;
pub use candidates::ElderCandidates;
pub use node_state::{MembershipState, NodeState};
pub use peer::Peer;
use crate::{node::agreement::SectionSigned, SectionAuthorityProvider};
use secured_linked_list::SecuredLinkedList;
use serde::{Deserialize, Serialize};
use std::{
collections::{btree_map, BTreeMap},
hash::{Hash, Hasher},
};
use threshold_crypto::PublicKey as BlsPublicKey;
use xor_name::XorName;
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Section {
pub genesis_key: BlsPublicKey,
pub chain: SecuredLinkedList,
pub section_auth: SectionSigned<SectionAuthorityProvider>,
pub members: SectionPeers,
}
#[derive(Clone, Default, Debug, Eq, Serialize, Deserialize)]
pub struct SectionPeers {
pub members: BTreeMap<XorName, SectionSigned<NodeState>>,
}
impl PartialEq for SectionPeers {
fn eq(&self, other: &Self) -> bool {
self.members == other.members
}
}
impl Hash for SectionPeers {
fn hash<H: Hasher>(&self, state: &mut H) {
self.members.hash(state)
}
}
pub struct IntoIter(btree_map::IntoIter<XorName, SectionSigned<NodeState>>);
impl Iterator for IntoIter {
type Item = SectionSigned<NodeState>;
fn next(&mut self) -> Option<Self::Item> {
self.0.next().map(|(_, info)| info)
}
}
impl IntoIterator for SectionPeers {
type IntoIter = IntoIter;
type Item = <Self::IntoIter as Iterator>::Item;
fn into_iter(self) -> Self::IntoIter {
IntoIter(self.members.into_iter())
}
}