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    /// Independently collected Governance provider metadata provenance.
18    pub governance_source: crate::report::CollectionSourceRequest,
19    pub node_providers: Vec<NnsNodeProviderRow>,
20}
21
22///
23/// NnsNodeProviderRow
24///
25/// One node provider row projected from governance and registry data.
26///
27
28#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
29#[serde(deny_unknown_fields)]
30pub struct NnsNodeProviderRow {
31    pub node_provider_principal: String,
32    pub name: Option<String>,
33    pub node_count: Option<u32>,
34    pub reward_account_hex: Option<String>,
35}
36
37///
38/// NnsNodeProviderInfoReport
39///
40/// Detailed report for one resolved NNS node provider.
41///
42
43#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
44pub struct NnsNodeProviderInfoReport {
45    pub schema_version: u32,
46    pub input: String,
47    pub resolved_from: String,
48    /// Registry acquisition metadata, flattened in JSON.
49    #[serde(flatten)]
50    pub provenance: crate::nns::registry::NnsRegistryInventoryProvenance,
51    pub governance_canister_id: String,
52    /// Independently collected Governance provider metadata provenance.
53    pub governance_source: crate::report::CollectionSourceRequest,
54    /// Resolved inventory row.
55    #[serde(flatten)]
56    pub node_provider: NnsNodeProviderRow,
57}
58
59///
60/// NnsNodeProviderMetadata
61///
62/// Governance provider metadata collected independently of Registry membership and counts.
63///
64
65#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
66#[serde(deny_unknown_fields)]
67pub struct NnsNodeProviderMetadata {
68    /// Current persisted metadata contract, always 1 before 1.0.
69    pub schema_version: u32,
70    /// Governance acquisition time, endpoint and collector.
71    #[serde(flatten)]
72    pub source: crate::report::CollectionSourceRequest,
73    /// Governance canister returning the provider list.
74    pub governance_canister_id: String,
75    /// Provider identities and reward accounts; Registry node counts must be absent.
76    pub node_providers: Vec<NnsNodeProviderRow>,
77}
78
79#[cfg(feature = "nns-host")]
80impl crate::cache_file::JsonCacheReport for NnsNodeProviderMetadata {
81    fn schema_version(&self) -> u32 {
82        self.schema_version
83    }
84    fn network(&self) -> &str {
85        &self.source.network
86    }
87}