ic-query 0.89.0

Internet Computer query library for CloudEngine, NNS, SNS, ICRC, system canisters, and public network metadata
Documentation
//! Collect complete Governance snapshots through family-specific paging.

use super::{
    NNS_NEURON_CACHE_COMPONENT, collection::fetch_complete_neuron_collection,
    paths::nns_neuron_cache_paths,
};
use crate::{
    QueryProgress,
    nns::{
        LiveNnsSource, NnsGovernanceRefreshRequest,
        governance::{NnsGovernanceRefreshReport, run_governance_snapshot_refresh},
        neuron::report::{
            NNS_NEURON_FETCHED_BY, NnsNeuronHostError, enforce_mainnet_network,
            source::{NnsNeuronSource, validate_page_size},
        },
    },
};

/// Refresh the complete public neuron index using the built-in live source.
pub async fn refresh_nns_neuron_cache(
    request: &NnsGovernanceRefreshRequest,
) -> Result<NnsGovernanceRefreshReport, NnsNeuronHostError> {
    refresh_nns_neuron_cache_with_source_and_progress(
        request,
        &LiveNnsSource::default(),
        &mut |_| {},
    )
    .await
}

/// Refresh with a caller-owned source and progress sink.
pub async fn refresh_nns_neuron_cache_with_source_and_progress(
    request: &NnsGovernanceRefreshRequest,
    source: &dyn NnsNeuronSource,
    progress: &mut dyn QueryProgress,
) -> Result<NnsGovernanceRefreshReport, NnsNeuronHostError> {
    validate_page_size(request.page_size)?;
    enforce_mainnet_network(&request.network)?;
    let paths = nns_neuron_cache_paths(&request.cache_root, &request.network);
    run_governance_snapshot_refresh(
        request,
        &paths,
        NNS_NEURON_CACHE_COMPONENT,
        async |context| {
            let (data, publication_progress) = fetch_complete_neuron_collection(
                request,
                source,
                &paths.refresh_attempt_path,
                progress,
            )
            .await?;
            context.publish(
                crate::nns::NnsGovernanceCollection::Neurons,
                NNS_NEURON_FETCHED_BY,
                publication_progress,
                data,
            )
        },
    )
    .await
}