use super::invocation::{SnsCanisterCallType, SnsCanisterMethod};
use serde::Serialize;
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct MainnetSnsMetrics {
pub governance_canister_id: String,
pub method: SnsCanisterMethod,
pub call_type: SnsCanisterCallType,
pub time_window_seconds: u64,
pub point_in_time_guaranteed: bool,
pub treasury_metrics_cached: bool,
pub num_recently_submitted_proposals: Option<u64>,
pub num_recently_executed_proposals: Option<u64>,
pub last_ledger_block_timestamp: Option<u64>,
pub genesis_timestamp_seconds: Option<u64>,
pub treasury_metrics: Vec<SnsTreasuryMetricRow>,
pub voting_power_metrics: Option<SnsVotingPowerMetrics>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsTreasuryMetricRow {
pub treasury: i32,
pub name: Option<String>,
pub ledger_canister_id: Option<String>,
pub account_owner: Option<String>,
pub account_subaccount_hex: Option<String>,
pub amount_e8s: Option<u64>,
pub original_amount_e8s: Option<u64>,
pub timestamp_seconds: Option<u64>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsVotingPowerMetrics {
pub governance_total_potential_voting_power: Option<u64>,
pub timestamp_seconds: Option<u64>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsMetricsReport {
pub schema_version: u32,
pub network: String,
pub sns_wasm_canister_id: String,
pub fetched_at: String,
pub source_endpoint: String,
pub fetched_by: String,
pub id: usize,
pub name: String,
pub root_canister_id: String,
pub treasury_metric_count: usize,
#[serde(flatten)]
pub metrics: MainnetSnsMetrics,
}
pub(in crate::sns::report) const fn sns_treasury_kind(treasury: i32) -> &'static str {
match treasury {
0 => "unspecified",
1 => "icp",
2 => "sns_token",
_ => "unknown",
}
}