use super::SnsRefreshAttemptStatus;
use crate::cache::CacheValidationStatus;
use serde::Serialize;
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsCacheListReport {
pub schema_version: u32,
pub network: String,
pub cache_root: String,
pub caches: Vec<SnsCacheSummary>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsCacheStatusReport {
pub schema_version: u32,
pub network: String,
pub cache_root: String,
pub input: String,
pub found: bool,
pub cache: Option<SnsCacheSummary>,
pub expected_cache_path: String,
pub refresh_attempt_path: String,
pub latest_attempt: Option<SnsRefreshAttemptStatus>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsCacheSummary {
pub cache_path: String,
pub refresh_attempt_path: String,
pub latest_attempt: Option<SnsRefreshAttemptStatus>,
#[serde(flatten)]
pub admission: SnsCacheAdmission,
}
impl SnsCacheSummary {
#[must_use]
pub const fn valid(&self) -> Option<&SnsValidCacheSummary> {
match &self.admission {
SnsCacheAdmission::Valid { data } => Some(data),
SnsCacheAdmission::Invalid { .. } => None,
}
}
#[must_use]
pub const fn cache_status(&self) -> CacheValidationStatus {
match self.admission {
SnsCacheAdmission::Valid { .. } => CacheValidationStatus::Valid,
SnsCacheAdmission::Invalid { .. } => CacheValidationStatus::Invalid,
}
}
#[must_use]
pub fn cache_error(&self) -> Option<&str> {
match &self.admission {
SnsCacheAdmission::Invalid { cache_error } => Some(cache_error),
SnsCacheAdmission::Valid { .. } => None,
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
#[serde(tag = "cache_status", rename_all = "snake_case")]
pub enum SnsCacheAdmission {
Valid {
#[serde(flatten)]
data: SnsValidCacheSummary,
},
Invalid {
cache_error: String,
},
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct SnsValidCacheSummary {
pub governance_canister_id: String,
pub row_count: usize,
pub page_count: u32,
pub page_size: u32,
pub fetched_at: String,
pub source_endpoint: String,
}