use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum CacheLevel {
ByInput,
ByContent,
}
impl CacheLevel {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::ByInput => "by-input",
Self::ByContent => "by-content",
}
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct CacheLevelStats {
pub entries: u64,
pub bytes: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct CacheStatsPayload {
pub by_input: CacheLevelStats,
pub by_content: CacheLevelStats,
pub aliases: u64,
pub total_bytes: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub oldest_entry_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub newest_entry_at: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct CacheListRow {
pub key: String,
pub level: CacheLevel,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub commit: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub series: Option<String>,
pub age_days: u32,
pub bytes: u64,
#[serde(default)]
pub alias: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct CacheListPayload {
pub rows: Vec<CacheListRow>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct CacheShowPayload {
pub key: String,
pub level: CacheLevel,
pub created_at: String,
pub age_days: u32,
pub bytes: u64,
#[serde(default)]
pub alias: bool,
pub key_inputs: serde_json::Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub verdict_summary: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct CacheMutationPayload {
pub removed_entries: u64,
pub removed_bytes: u64,
}