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    node_provider_count,
27    node_providers,
28    |report: &NnsNodeProviderListReport| Some(report.governance_canister_id.clone()),
29    |report: &NnsNodeProviderListReport| {
30        if report.governance_canister_id != crate::nns::MAINNET_GOVERNANCE_CANISTER_ID {
31            return Err(format!(
32                "governance_canister_id is {}, expected {}",
33                report.governance_canister_id,
34                crate::nns::MAINNET_GOVERNANCE_CANISTER_ID
35            ));
36        }
37        Ok(())
38    },
39);
40
41///
42/// NnsNodeProviderRow
43///
44/// One node provider row projected from governance and registry data.
45///
46
47#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
48pub struct NnsNodeProviderRow {
49    pub node_provider_principal: String,
50    pub name: Option<String>,
51    pub node_count: Option<u32>,
52    pub reward_account_hex: Option<String>,
53}
54
55///
56/// NnsNodeProviderInfoReport
57///
58/// Detailed report for one resolved NNS node provider.
59///
60
61#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
62pub struct NnsNodeProviderInfoReport {
63    pub schema_version: u32,
64    pub input: String,
65    pub resolved_from: String,
66    /// Registry acquisition metadata, flattened in JSON.
67    #[serde(flatten)]
68    pub provenance: crate::nns::registry::NnsRegistryInventoryProvenance,
69    pub governance_canister_id: String,
70    /// Resolved inventory row.
71    #[serde(flatten)]
72    pub node_provider: NnsNodeProviderRow,
73}