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 Siblings,
24}
25
26impl CacheLevel {
27 #[must_use]
28 pub fn as_str(self) -> &'static str {
29 match self {
30 Self::ByInput => "by-input",
31 Self::ByContent => "by-content",
32 Self::Siblings => "siblings",
33 }
34 }
35}
36
37#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
39#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40pub struct CacheLevelStats {
41 pub entries: u64,
42 pub bytes: u64,
43}
44
45#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
47#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
48pub struct CacheStatsPayload {
49 pub by_input: CacheLevelStats,
50 pub by_content: CacheLevelStats,
51 pub siblings: CacheLevelStats,
52 pub aliases: u64,
54 pub total_bytes: u64,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub oldest_entry_at: Option<String>,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub newest_entry_at: Option<String>,
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
65#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
66pub struct CacheListRow {
67 pub key: String,
71 pub level: CacheLevel,
72 #[serde(default, skip_serializing_if = "Option::is_none")]
74 pub commit: Option<String>,
75 #[serde(default, skip_serializing_if = "Option::is_none")]
77 pub series: Option<String>,
78 pub age_days: u32,
79 pub bytes: u64,
80 #[serde(default)]
82 pub alias: bool,
83}
84
85#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
87#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
88pub struct CacheListPayload {
89 pub rows: Vec<CacheListRow>,
90}
91
92#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
94#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
95pub struct CacheShowPayload {
96 pub key: String,
97 pub level: CacheLevel,
98 pub created_at: String,
99 pub age_days: u32,
100 pub bytes: u64,
101 #[serde(default)]
104 pub alias: bool,
105 pub key_inputs: serde_json::Value,
107 #[serde(default, skip_serializing_if = "Option::is_none")]
110 pub verdict_summary: Option<serde_json::Value>,
111 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub value: Option<serde_json::Value>,
114}
115
116#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
118#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
119pub struct CacheMutationPayload {
120 pub removed_entries: u64,
121 pub removed_bytes: u64,
122}