Skip to main content

ic_query/nns/node_provider/report/model/
report.rs

1use serde::{Deserialize, Serialize};
2
3///
4/// NnsNodeProviderListReport
5///
6/// Complete NNS node provider inventory report with source metadata.
7///
8
9#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
10#[serde(deny_unknown_fields)]
11pub struct NnsNodeProviderListReport {
12    pub schema_version: u32,
13    /// Registry acquisition metadata, flattened in JSON.
14    #[serde(flatten)]
15    pub provenance: crate::nns::registry::NnsRegistryInventoryProvenance,
16    pub governance_canister_id: String,
17    pub node_provider_count: usize,
18    pub node_providers: Vec<NnsNodeProviderRow>,
19}
20
21#[cfg(feature = "nns-host")]
22impl_nns_inventory_report!(
23    NnsNodeProviderListReport,
24    super::super::NNS_NODE_PROVIDER_LIST_REPORT_SCHEMA_VERSION,
25    "node_provider",
26    super::super::COLLECTION,
27    node_provider_count,
28    node_providers,
29    |report: &NnsNodeProviderListReport| Some(report.governance_canister_id.clone()),
30    |report: &NnsNodeProviderListReport| {
31        if report.governance_canister_id != crate::nns::MAINNET_GOVERNANCE_CANISTER_ID {
32            return Err(format!(
33                "governance_canister_id is {}, expected {}",
34                report.governance_canister_id,
35                crate::nns::MAINNET_GOVERNANCE_CANISTER_ID
36            ));
37        }
38        Ok(())
39    },
40);
41
42///
43/// NnsNodeProviderRow
44///
45/// One node provider row projected from governance and registry data.
46///
47
48#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
49pub struct NnsNodeProviderRow {
50    pub node_provider_principal: String,
51    pub name: Option<String>,
52    pub node_count: Option<u32>,
53    pub reward_account_hex: Option<String>,
54}
55
56///
57/// NnsNodeProviderInfoReport
58///
59/// Detailed report for one resolved NNS node provider.
60///
61
62#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
63pub struct NnsNodeProviderInfoReport {
64    pub schema_version: u32,
65    pub input: String,
66    pub resolved_from: String,
67    /// Registry acquisition metadata, flattened in JSON.
68    #[serde(flatten)]
69    pub provenance: crate::nns::registry::NnsRegistryInventoryProvenance,
70    pub governance_canister_id: String,
71    /// Resolved inventory row.
72    #[serde(flatten)]
73    pub node_provider: NnsNodeProviderRow,
74}