ic-query 0.6.10

Internet Computer query library for NNS, SNS, ICRC, and related public network metadata
Documentation
use crate::nns::topology::report::{
    LiveNnsTopologySource, NnsTopologyCapacityReport, NnsTopologyCapacityRequest,
    NnsTopologyGapsReport, NnsTopologyGapsRequest, NnsTopologyHostError,
    NnsTopologyProvidersReport, NnsTopologyProvidersRequest, NnsTopologyRegionsReport,
    NnsTopologyRegionsRequest, NnsTopologySource, capacity::topology_capacity_report_from_report,
    enforce_mainnet_network, gaps::topology_gaps_report_from_reports,
    providers::topology_providers_report_from_reports,
    regions::topology_regions_report_from_report, request::TopologyRequestParts,
    source::topology_source_request_from,
};

pub fn build_nns_topology_gaps_report(
    request: &NnsTopologyGapsRequest,
) -> Result<NnsTopologyGapsReport, NnsTopologyHostError> {
    build_nns_topology_gaps_report_with_source(request, &LiveNnsTopologySource)
}

pub fn build_nns_topology_gaps_report_with_source(
    request: &NnsTopologyGapsRequest,
    source: &dyn NnsTopologySource,
) -> Result<NnsTopologyGapsReport, NnsTopologyHostError> {
    enforce_mainnet_network(request.network())?;

    let source_request = topology_source_request_from(request);
    let node_report = source.fetch_node_list_report(&source_request)?;
    let node_provider_report = source.fetch_node_provider_list_report(&source_request)?;
    let node_operator_report = source.fetch_node_operator_list_report(&source_request)?;
    let data_center_report = source.fetch_data_center_list_report(&source_request)?;

    Ok(topology_gaps_report_from_reports(
        request.network().to_string(),
        request.source_endpoint().to_string(),
        node_report,
        node_provider_report,
        node_operator_report,
        data_center_report,
    ))
}

pub fn build_nns_topology_capacity_report(
    request: &NnsTopologyCapacityRequest,
) -> Result<NnsTopologyCapacityReport, NnsTopologyHostError> {
    build_nns_topology_capacity_report_with_source(request, &LiveNnsTopologySource)
}

pub fn build_nns_topology_capacity_report_with_source(
    request: &NnsTopologyCapacityRequest,
    source: &dyn NnsTopologySource,
) -> Result<NnsTopologyCapacityReport, NnsTopologyHostError> {
    enforce_mainnet_network(request.network())?;

    let source_request = topology_source_request_from(request);
    let node_operator_report = source.fetch_node_operator_list_report(&source_request)?;

    Ok(topology_capacity_report_from_report(
        request.network().to_string(),
        request.source_endpoint().to_string(),
        node_operator_report,
    ))
}

pub fn build_nns_topology_regions_report(
    request: &NnsTopologyRegionsRequest,
) -> Result<NnsTopologyRegionsReport, NnsTopologyHostError> {
    build_nns_topology_regions_report_with_source(request, &LiveNnsTopologySource)
}

pub fn build_nns_topology_regions_report_with_source(
    request: &NnsTopologyRegionsRequest,
    source: &dyn NnsTopologySource,
) -> Result<NnsTopologyRegionsReport, NnsTopologyHostError> {
    enforce_mainnet_network(request.network())?;

    let source_request = topology_source_request_from(request);
    let data_center_report = source.fetch_data_center_list_report(&source_request)?;

    Ok(topology_regions_report_from_report(
        request.network().to_string(),
        request.source_endpoint().to_string(),
        data_center_report,
    ))
}

pub fn build_nns_topology_providers_report(
    request: &NnsTopologyProvidersRequest,
) -> Result<NnsTopologyProvidersReport, NnsTopologyHostError> {
    build_nns_topology_providers_report_with_source(request, &LiveNnsTopologySource)
}

pub fn build_nns_topology_providers_report_with_source(
    request: &NnsTopologyProvidersRequest,
    source: &dyn NnsTopologySource,
) -> Result<NnsTopologyProvidersReport, NnsTopologyHostError> {
    enforce_mainnet_network(request.network())?;

    let source_request = topology_source_request_from(request);
    let node_report = source.fetch_node_list_report(&source_request)?;
    let node_provider_report = source.fetch_node_provider_list_report(&source_request)?;
    let node_operator_report = source.fetch_node_operator_list_report(&source_request)?;
    let data_center_report = source.fetch_data_center_list_report(&source_request)?;

    Ok(topology_providers_report_from_reports(
        request.network().to_string(),
        request.source_endpoint().to_string(),
        node_report,
        node_provider_report,
        node_operator_report,
        data_center_report,
    ))
}