use crate::{
QueryProgress,
sns::report::{
SnsHostError, SnsSnapshotRefreshReport, SnsSnapshotRefreshRequest,
cache_refresh::{publish_complete_sns_snapshot, run_resolved_sns_snapshot_refresh},
live::LiveSnsSource,
neurons_cache::{collection::fetch_complete_sns_neurons, paths::SnsNeuronsCacheCollection},
source::SnsNeuronsSource,
},
};
pub async fn refresh_sns_neurons_cache(
request: &SnsSnapshotRefreshRequest,
) -> Result<SnsSnapshotRefreshReport, SnsHostError> {
refresh_sns_neurons_cache_with_source_and_progress(
request,
&LiveSnsSource::default(),
&mut |_| {},
)
.await
}
pub async fn refresh_sns_neurons_cache_with_source_and_progress(
request: &SnsSnapshotRefreshRequest,
source: &dyn SnsNeuronsSource,
progress: &mut dyn QueryProgress,
) -> Result<SnsSnapshotRefreshReport, SnsHostError> {
run_resolved_sns_snapshot_refresh::<SnsNeuronsCacheCollection, _>(request, async |context| {
let complete =
fetch_complete_sns_neurons(context.refresh_context(), source, progress).await?;
publish_complete_sns_snapshot(
context,
complete.page_count,
complete.last_cursor,
crate::sns::report::neurons_cache::model::SnsNeuronsCacheRows {
neurons: complete.rows,
},
)
})
.await
}