use crate::nns::{
data_center::NnsDataCenterListReport, node_operator::NnsNodeOperatorListReport,
node_provider::NnsNodeProviderListReport,
};
use std::collections::BTreeSet;
pub(in crate::nns::topology::report) struct TopologyRelationIndex<'a> {
node_provider_principals: BTreeSet<&'a str>,
node_operator_principals: BTreeSet<&'a str>,
data_center_ids: BTreeSet<&'a str>,
}
impl<'a> TopologyRelationIndex<'a> {
pub(in crate::nns::topology::report) fn from_reports(
node_provider_report: &'a NnsNodeProviderListReport,
node_operator_report: &'a NnsNodeOperatorListReport,
data_center_report: &'a NnsDataCenterListReport,
) -> Self {
let node_provider_principals = node_provider_report
.node_providers
.iter()
.map(|provider| provider.node_provider_principal.as_str())
.collect::<BTreeSet<_>>();
let node_operator_principals = node_operator_report
.node_operators
.iter()
.map(|operator| operator.node_operator_principal.as_str())
.collect::<BTreeSet<_>>();
let data_center_ids = data_center_report
.data_centers
.iter()
.map(|data_center| data_center.data_center_id.as_str())
.collect::<BTreeSet<_>>();
Self {
node_provider_principals,
node_operator_principals,
data_center_ids,
}
}
pub(in crate::nns::topology::report) fn has_node_provider(&self, principal: &str) -> bool {
self.node_provider_principals.contains(principal)
}
pub(in crate::nns::topology::report) fn has_node_operator(&self, principal: &str) -> bool {
self.node_operator_principals.contains(principal)
}
pub(in crate::nns::topology::report) fn has_data_center(&self, data_center_id: &str) -> bool {
self.data_center_ids.contains(data_center_id)
}
}