use super::agent::{mainnet_agent, mainnet_registry_canister};
use crate::ic_registry::{
MainnetRegistryFetchRequest, RegistryFetchError,
inventory::fetch_registry_relation_inventory,
relations::{RegistryRelationInventory, RegistryRelationInventoryScope},
transport::get_latest_version,
};
pub(super) struct MainnetRegistryRelationSnapshot {
pub(super) registry_version: u64,
pub(super) inventory: RegistryRelationInventory,
}
pub(super) async fn fetch_mainnet_registry_relation_snapshot(
request: &MainnetRegistryFetchRequest,
scope: RegistryRelationInventoryScope,
) -> Result<MainnetRegistryRelationSnapshot, RegistryFetchError> {
let agent = mainnet_agent(request)?;
let registry_canister = mainnet_registry_canister()?;
let registry_version = get_latest_version(&agent, ®istry_canister).await?;
let inventory =
fetch_registry_relation_inventory(&agent, ®istry_canister, registry_version, scope)
.await?;
Ok(MainnetRegistryRelationSnapshot {
registry_version,
inventory,
})
}