use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum StorageClass {
#[default]
Instance,
Persistent,
Temporary,
Other,
}
impl StorageClass {
pub fn label(&self) -> &'static str {
match self {
StorageClass::Instance => "instance",
StorageClass::Persistent => "persistent",
StorageClass::Temporary => "temporary",
StorageClass::Other => "other",
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct StorageEntry {
pub key: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
pub class: StorageClass,
pub current_ttl: u32,
pub days_remaining: u32,
pub extension_cost_stroops: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct StorageReport {
pub contract_id: String,
pub total_entries: usize,
pub instance_entries: usize,
pub persistent_entries: usize,
pub temporary_entries: usize,
pub other_entries: usize,
pub total_size_bytes: Option<usize>,
pub ttl_summary: Option<TtlInfoSummary>,
#[serde(default)]
pub entries: Vec<StorageEntry>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct TtlInfoSummary {
pub minimum_ttl: u32,
pub maximum_ttl: u32,
pub average_ttl: u32,
pub expiring_entries_count: usize,
pub estimated_rent_cost: Option<u64>,
}