use super::super::{
super::{MainnetSns, MainnetSnsCanisters, short_principal},
SnsHostError,
types::{DeployedSns, GetMetadataResponse},
};
use super::common::clean_optional_text;
use candid::Principal;
pub(in crate::sns::report::live) fn mainnet_sns_canisters_from_deployed_sns(
sns: DeployedSns,
) -> Result<MainnetSnsCanisters, SnsHostError> {
Ok(MainnetSnsCanisters {
root_canister_id: required_principal_text(sns.root_canister_id, "root_canister_id")?,
governance_canister_id: required_principal_text(
sns.governance_canister_id,
"governance_canister_id",
)?,
ledger_canister_id: required_principal_text(sns.ledger_canister_id, "ledger_canister_id")?,
swap_canister_id: required_principal_text(sns.swap_canister_id, "swap_canister_id")?,
index_canister_id: required_principal_text(sns.index_canister_id, "index_canister_id")?,
})
}
pub(in crate::sns::report::live) fn mainnet_sns_from_canisters_and_metadata(
sns: MainnetSnsCanisters,
metadata: GetMetadataResponse,
metadata_error: Option<String>,
) -> MainnetSns {
let name = clean_optional_text(metadata.name)
.unwrap_or_else(|| format!("unnamed-{}", short_principal(&sns.root_canister_id)));
MainnetSns {
id: 0,
name,
description: clean_optional_text(metadata.description),
url: clean_optional_text(metadata.url),
root_canister_id: sns.root_canister_id,
governance_canister_id: sns.governance_canister_id,
ledger_canister_id: sns.ledger_canister_id,
swap_canister_id: sns.swap_canister_id,
index_canister_id: sns.index_canister_id,
metadata_error,
}
}
fn required_principal_text(
principal: Option<Principal>,
field: &'static str,
) -> Result<String, SnsHostError> {
principal
.map(|principal| principal.to_text())
.ok_or_else(|| SnsHostError::InvalidPrincipal {
field,
reason: "missing principal".to_string(),
})
}