use serde::Serialize;
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SnsTreasuryKind {
Unspecified,
Icp,
SnsToken,
Unknown,
}
impl SnsTreasuryKind {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Unspecified => "unspecified",
Self::Icp => "icp",
Self::SnsToken => "sns_token",
Self::Unknown => "unknown",
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsTreasuryMetricRow {
pub treasury: i32,
pub treasury_kind: SnsTreasuryKind,
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 governance_canister_id: String,
pub method: String,
pub call_type: String,
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_metric_count: usize,
pub treasury_metrics: Vec<SnsTreasuryMetricRow>,
pub voting_power_metrics: Option<SnsVotingPowerMetrics>,
}