use serde::Serialize;
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SnsCanisterRole {
Root,
Governance,
Ledger,
Swap,
Index,
Archive,
Dapp,
Extension,
}
impl SnsCanisterRole {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Root => "root",
Self::Governance => "governance",
Self::Ledger => "ledger",
Self::Swap => "swap",
Self::Index => "index",
Self::Archive => "archive",
Self::Dapp => "dapp",
Self::Extension => "extension",
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SnsCanisterStatus {
Running,
Stopping,
Stopped,
}
impl SnsCanisterStatus {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Running => "running",
Self::Stopping => "stopping",
Self::Stopped => "stopped",
}
}
}
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SnsCanisterGapKind {
InventoryCanisterIdMissing,
SummaryMissing,
SummaryCanisterIdMissing,
SummaryCanisterIdMismatch,
SummaryNotInInventory,
DuplicateSummary,
StatusMissing,
HealthUnsupported,
}
impl SnsCanisterGapKind {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::InventoryCanisterIdMissing => "inventory_canister_id_missing",
Self::SummaryMissing => "summary_missing",
Self::SummaryCanisterIdMissing => "summary_canister_id_missing",
Self::SummaryCanisterIdMismatch => "summary_canister_id_mismatch",
Self::SummaryNotInInventory => "summary_not_in_inventory",
Self::DuplicateSummary => "duplicate_summary",
Self::StatusMissing => "status_missing",
Self::HealthUnsupported => "health_unsupported",
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsCanisterGap {
pub kind: SnsCanisterGapKind,
pub role: SnsCanisterRole,
pub inventory_canister_id: Option<String>,
pub summary_canister_id: Option<String>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsCanisterRow {
pub role: SnsCanisterRole,
pub canister_id: String,
pub status: Option<SnsCanisterStatus>,
pub module_hash_hex: Option<String>,
pub cycles: Option<String>,
pub memory_size: Option<String>,
pub idle_cycles_burned_per_day: Option<String>,
pub controllers: Vec<String>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsCanisterReport {
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 inventory_method: String,
pub health_method: String,
pub health_call_type: String,
pub health_update_canister_list: bool,
pub point_in_time_guaranteed: bool,
pub canister_count: usize,
pub health_status_count: usize,
pub gap_count: usize,
pub canisters: Vec<SnsCanisterRow>,
pub gaps: Vec<SnsCanisterGap>,
}