use super::block_on_sns;
use crate::sns::report::{
MainnetSns, MainnetSnsCanisterInventory, SnsHostError, SnsSourceRequest,
live::{
convert::mainnet_sns_canister_inventory,
query::{principal_from_text, query_canister, sns_agent, update_canister},
types::{
GetSnsCanistersSummaryRequest, GetSnsCanistersSummaryResponse, ListSnsCanistersRequest,
ListSnsCanistersResponse,
},
},
};
pub(in crate::sns::report::live) fn fetch_mainnet_sns_canisters(
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<MainnetSnsCanisterInventory, SnsHostError> {
block_on_sns(fetch_mainnet_sns_canisters_async(request, sns))
}
async fn fetch_mainnet_sns_canisters_async(
request: &SnsSourceRequest,
sns: &MainnetSns,
) -> Result<MainnetSnsCanisterInventory, SnsHostError> {
let agent = sns_agent(request)?;
let root_canister = principal_from_text(&sns.root_canister_id, "root_canister_id")?;
let inventory: ListSnsCanistersResponse = query_canister(
&agent,
&root_canister,
"list_sns_canisters",
"ListSnsCanistersRequest",
"ListSnsCanistersResponse",
&ListSnsCanistersRequest {},
)
.await?;
let health_request = GetSnsCanistersSummaryRequest::read_only();
let health: GetSnsCanistersSummaryResponse = update_canister(
&agent,
&root_canister,
"get_sns_canisters_summary",
"GetSnsCanistersSummaryRequest",
"GetSnsCanistersSummaryResponse",
&health_request,
)
.await?;
mainnet_sns_canister_inventory(inventory, health)
}