ic-query 0.25.28

Internet Computer query library for NNS, SNS, ICRC, system canisters, and public network metadata
Documentation
//! Module: sns::report::neurons_cache::refresh::run
//!
//! Responsibility: expose complete SNS neuron snapshot refresh entry points.
//! Does not own: shared locking and attempt mechanics, cache publication, or text rendering.
//! Boundary: adapts neuron collection and publication to the shared refresh lifecycle.

use super::publish::publish_complete_sns_neurons_cache;
use crate::{
    QueryProgress,
    progress::IgnoreQueryProgress,
    sns::report::{
        SnsHostError, SnsNeuronsRefreshReport, SnsNeuronsRefreshRequest,
        cache_refresh::run_resolved_sns_snapshot_refresh,
        live::LiveSnsSource,
        neurons_cache::{collection::fetch_complete_sns_neurons, paths::SnsNeuronsCacheCollection},
        source::SnsNeuronsSource,
    },
};

pub const DEFAULT_SNS_NEURONS_REFRESH_LOCK_STALE_SECONDS: u64 = 30 * 60;

pub fn refresh_sns_neurons_cache(
    request: &SnsNeuronsRefreshRequest,
) -> Result<SnsNeuronsRefreshReport, SnsHostError> {
    refresh_sns_neurons_cache_with_source(request, &LiveSnsSource)
}

/// Refresh a complete SNS neuron snapshot and emit structured progress events.
pub fn refresh_sns_neurons_cache_with_progress(
    request: &SnsNeuronsRefreshRequest,
    progress: &mut dyn QueryProgress,
) -> Result<SnsNeuronsRefreshReport, SnsHostError> {
    refresh_sns_neurons_cache_with_source_and_progress(request, &LiveSnsSource, progress)
}

pub fn refresh_sns_neurons_cache_with_source(
    request: &SnsNeuronsRefreshRequest,
    source: &dyn SnsNeuronsSource,
) -> Result<SnsNeuronsRefreshReport, SnsHostError> {
    let mut progress = IgnoreQueryProgress;
    refresh_sns_neurons_cache_with_source_and_progress(request, source, &mut progress)
}

fn refresh_sns_neurons_cache_with_source_and_progress(
    request: &SnsNeuronsRefreshRequest,
    source: &dyn SnsNeuronsSource,
    progress: &mut dyn QueryProgress,
) -> Result<SnsNeuronsRefreshReport, SnsHostError> {
    run_resolved_sns_snapshot_refresh::<_, SnsNeuronsCacheCollection, _>(
        request,
        source,
        DEFAULT_SNS_NEURONS_REFRESH_LOCK_STALE_SECONDS,
        |context| {
            let complete = fetch_complete_sns_neurons(context.refresh_context(), source, progress)?;
            publish_complete_sns_neurons_cache(context, complete)
        },
    )
}