use crate::snapshot_cache::{SnapshotJsonPaths, SnapshotKey, snapshot_network_dir};
use std::{
marker::PhantomData,
path::{Path, PathBuf},
};
pub(in crate::sns::report) trait SnsCacheCollection {
const COLLECTION: &'static str;
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub(in crate::sns::report) struct SnsSnapshotCachePaths<Collection> {
pub(in crate::sns::report) cache_path: PathBuf,
pub(in crate::sns::report) lock_path: PathBuf,
pub(in crate::sns::report) attempt_path: PathBuf,
collection: PhantomData<Collection>,
}
impl<Collection> SnsSnapshotCachePaths<Collection>
where
Collection: SnsCacheCollection,
{
pub(in crate::sns::report) fn for_root(
icp_root: &Path,
network: &str,
root_canister_id: &str,
) -> Self {
let snapshot_key =
SnapshotKey::full("sns", network, root_canister_id, Collection::COLLECTION);
let snapshot_paths = SnapshotJsonPaths::for_key(icp_root, &snapshot_key);
Self {
cache_path: snapshot_paths.snapshot_path,
lock_path: snapshot_paths.refresh_lock_path,
attempt_path: snapshot_paths.refresh_attempt_path,
collection: PhantomData,
}
}
}
pub(in crate::sns::report) fn sns_snapshot_network_cache_dir(
icp_root: &Path,
network: &str,
) -> PathBuf {
snapshot_network_dir(icp_root, "sns", network)
}
pub(in crate::sns::report) fn sns_attempt_path_for_cache_path(cache_path: &Path) -> PathBuf {
cache_path.with_file_name("full.refresh-attempt.json")
}