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