use super::super::{
MainnetSns, MainnetSnsList, SNS_INFO_REPORT_SCHEMA_VERSION, SNS_LIST_REPORT_SCHEMA_VERSION,
SnsInfoReport, SnsListReport, SnsListRow, SnsListSort,
};
pub(in crate::sns::report) fn sns_list_report_from_list(
list: MainnetSnsList,
verbose: bool,
sort: SnsListSort,
) -> SnsListReport {
let MainnetSnsList {
network,
sns_wasm_canister_id,
fetched_at,
fetched_by,
source_endpoint,
sns_instances,
} = list;
let metadata_error_count = sns_instances
.iter()
.filter(|sns| sns.metadata_error.is_some())
.count();
let sns_instances = sns_instances
.into_iter()
.map(|sns| SnsListRow {
id: sns.id,
name: sns.name,
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: sns.metadata_error,
})
.collect::<Vec<_>>();
SnsListReport {
schema_version: SNS_LIST_REPORT_SCHEMA_VERSION,
network,
sns_wasm_canister_id,
fetched_at,
source_endpoint,
fetched_by,
verbose,
sort: sort.as_str().to_string(),
sns_count: sns_instances.len(),
metadata_error_count,
sns_instances,
}
}
pub(in crate::sns::report) fn sns_info_report_from_list(
list: MainnetSnsList,
id: usize,
sns: MainnetSns,
) -> SnsInfoReport {
SnsInfoReport {
schema_version: SNS_INFO_REPORT_SCHEMA_VERSION,
network: list.network,
sns_wasm_canister_id: list.sns_wasm_canister_id,
fetched_at: list.fetched_at,
source_endpoint: list.source_endpoint,
fetched_by: list.fetched_by,
id,
name: sns.name,
description: sns.description,
url: sns.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: sns.metadata_error,
}
}