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
// Copyright 2021 MaidSafe.net limited.
//
// This SAFE Network Software is licensed to you under The General Public License (GPL), version 3.
// Unless required by applicable law or agreed to in writing, the SAFE Network Software distributed
// under the GPL Licence is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. Please review the Licences for the specific language governing
// permissions and limitations relating to use of the SAFE Network Software.
use bls::PublicKeySet;
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use std::{
borrow::Borrow,
collections::BTreeMap,
fmt::{self, Display, Formatter},
net::SocketAddr,
};
use xor_name::{Prefix, XorName};
/// Details of section authority.
///
/// A new `SectionAuthorityProvider` is created whenever the elders change, due to an elder being
/// added or removed, or the section splitting or merging.
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Serialize, Deserialize)]
pub struct SectionAuthorityProvider {
/// The section prefix. It matches all the members' names.
pub prefix: Prefix,
/// Public key set of the section.
pub public_key_set: PublicKeySet,
/// The section's complete set of elders as a map from their name to their socket address.
pub elders: BTreeMap<XorName, SocketAddr>,
}
impl Borrow<Prefix> for SectionAuthorityProvider {
fn borrow(&self) -> &Prefix {
&self.prefix
}
}
impl Display for SectionAuthorityProvider {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(
f,
"{{{}}}/({:b})",
self.elders.keys().format(", "),
self.prefix,
)
}
}