1use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
15#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16#[serde(rename_all = "snake_case")]
17pub enum CacheLevel {
18 ByInput,
20 ByContent,
22}
23
24impl CacheLevel {
25 #[must_use]
26 pub fn as_str(self) -> &'static str {
27 match self {
28 Self::ByInput => "by-input",
29 Self::ByContent => "by-content",
30 }
31 }
32}
33
34#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
36#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37pub struct CacheLevelStats {
38 pub entries: u64,
39 pub bytes: u64,
40}
41
42#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
44#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45pub struct CacheStatsPayload {
46 pub by_input: CacheLevelStats,
47 pub by_content: CacheLevelStats,
48 pub aliases: u64,
50 pub total_bytes: u64,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub oldest_entry_at: Option<String>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub newest_entry_at: Option<String>,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
61#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
62pub struct CacheListRow {
63 pub key: String,
67 pub level: CacheLevel,
68 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub commit: Option<String>,
71 #[serde(default, skip_serializing_if = "Option::is_none")]
73 pub series: Option<String>,
74 pub age_days: u32,
75 pub bytes: u64,
76 #[serde(default)]
78 pub alias: bool,
79}
80
81#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
83#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
84pub struct CacheListPayload {
85 pub rows: Vec<CacheListRow>,
86}
87
88#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
90#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
91pub struct CacheShowPayload {
92 pub key: String,
93 pub level: CacheLevel,
94 pub created_at: String,
95 pub age_days: u32,
96 pub bytes: u64,
97 #[serde(default)]
100 pub alias: bool,
101 pub key_inputs: serde_json::Value,
103 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub verdict_summary: Option<serde_json::Value>,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub value: Option<serde_json::Value>,
109}
110
111#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
113#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
114pub struct CacheMutationPayload {
115 pub removed_entries: u64,
116 pub removed_bytes: u64,
117}