ic-query 0.93.4

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_PROPOSAL_CACHE_COMPONENT, collection::fetch_complete_nns_proposal_collection,
    paths::nns_proposal_cache_paths,
};
use crate::{
    QueryProgress,
    nns::{
        LiveNnsSource, NnsGovernanceRefreshRequest,
        governance::{NnsGovernanceRefreshReport, run_governance_snapshot_refresh},
        proposals::report::{
            NNS_PROPOSAL_FETCHED_BY, NnsProposalHostError, enforce_mainnet_network,
            source::{NnsProposalSource, validate_proposal_page_size},
        },
    },
};

/// Refresh a complete NNS proposal snapshot using the live NNS proposal source.
pub async fn refresh_nns_proposal_cache(
    request: &NnsGovernanceRefreshRequest,
) -> Result<NnsGovernanceRefreshReport, NnsProposalHostError> {
    refresh_nns_proposal_cache_with_source_and_progress(
        request,
        &LiveNnsSource::default(),
        &mut |_| {},
    )
    .await
}

/// Refresh with a caller-owned source and progress sink.
pub async fn refresh_nns_proposal_cache_with_source_and_progress(
    request: &NnsGovernanceRefreshRequest,
    source: &dyn NnsProposalSource,
    progress: &mut dyn QueryProgress,
) -> Result<NnsGovernanceRefreshReport, NnsProposalHostError> {
    validate_proposal_page_size(request.page_size)?;
    enforce_mainnet_network(&request.network)?;
    let paths = nns_proposal_cache_paths(&request.cache_root, &request.network);
    run_governance_snapshot_refresh(
        request,
        &paths,
        NNS_PROPOSAL_CACHE_COMPONENT,
        async |context| {
            let (data, publication_progress) = fetch_complete_nns_proposal_collection(
                request,
                source,
                &paths.refresh_attempt_path,
                progress,
            )
            .await?;
            context.publish(
                crate::nns::NnsGovernanceCollection::Proposals,
                NNS_PROPOSAL_FETCHED_BY,
                publication_progress,
                data,
            )
        },
    )
    .await
}