ic-query 0.84.0

Internet Computer query library for CloudEngine, NNS, SNS, ICRC, system canisters, and public network metadata
Documentation
use super::{
    NNS_NODE_OPERATOR_LIST_REPORT_SCHEMA_VERSION, NnsNodeOperatorHostError,
    NnsNodeOperatorListReport,
};
use crate::report::CollectionSourceRequest;
use crate::{
    ic_registry::{MainnetNodeOperatorList, fetch_mainnet_node_operator_list},
    nns::{LiveNnsSource, source::mainnet_registry_fetch_request},
};

///
/// NnsNodeOperatorSource
///
/// Source contract for fetching complete NNS node-operator list reports.
///

pub trait NnsNodeOperatorSource: Sync {
    fn fetch_node_operator_list_report<'a>(
        &'a self,
        request: &'a CollectionSourceRequest,
    ) -> crate::report::SourceFuture<'a, Result<NnsNodeOperatorListReport, NnsNodeOperatorHostError>>;
}

impl NnsNodeOperatorSource for LiveNnsSource {
    fn fetch_node_operator_list_report<'a>(
        &'a self,
        request: &'a CollectionSourceRequest,
    ) -> crate::report::SourceFuture<'a, Result<NnsNodeOperatorListReport, NnsNodeOperatorHostError>>
    {
        Box::pin(async move {
            let fetch_request = mainnet_registry_fetch_request(request, |network| {
                NnsNodeOperatorHostError::UnsupportedNetwork { network }
            })?;
            Ok(node_operator_report_from_list(
                fetch_mainnet_node_operator_list(&fetch_request).await?,
            ))
        })
    }
}

fn node_operator_report_from_list(list: MainnetNodeOperatorList) -> NnsNodeOperatorListReport {
    let node_operators = list.node_operators;
    NnsNodeOperatorListReport {
        schema_version: NNS_NODE_OPERATOR_LIST_REPORT_SCHEMA_VERSION,
        provenance: list.provenance,
        node_operator_count: node_operators.len(),
        node_operators,
    }
}