use crate::{
HostCacheError, ic_registry::RegistryFetchError, network::enforce_mainnet_network_with,
nns::topology::report::subnet_topology::NnsSubnetTopologyValidationError,
};
use thiserror::Error as ThisError;
#[derive(Debug, ThisError)]
pub enum NnsSubnetTopologyHostError {
#[error("NNS Subnet topology supports only the mainnet `ic` network; requested {network}")]
UnsupportedNetwork {
network: String,
},
#[error(transparent)]
Cache(#[from] HostCacheError),
#[error("refreshed Subnet topology network mismatch: requested {requested}, fetched {actual}")]
RefreshNetworkMismatch {
requested: String,
actual: String,
},
#[error(
"refreshed Subnet topology Registry canister mismatch: expected {expected}, fetched {actual}"
)]
RegistryCanisterMismatch {
expected: String,
actual: String,
},
#[error(
"refreshed Subnet topology source endpoint mismatch: requested {requested}, fetched {actual}"
)]
SourceEndpointMismatch {
requested: String,
actual: String,
},
#[error(transparent)]
Registry(#[from] RegistryFetchError),
#[error(transparent)]
Validation(#[from] NnsSubnetTopologyValidationError),
}
pub(super) fn enforce_mainnet_network(network: &str) -> Result<(), NnsSubnetTopologyHostError> {
enforce_mainnet_network_with(network, |network| {
NnsSubnetTopologyHostError::UnsupportedNetwork { network }
})
}