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]
29 pub fn dir_name(self) -> &'static str {
30 match self {
31 Self::ByInput => "by-input",
32 Self::ByContent => "by-content",
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 aliases: u64,
53 pub total_bytes: u64,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub oldest_entry_at: Option<String>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub newest_entry_at: Option<String>,
60}
61
62#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
64#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
65pub struct CacheListRow {
66 pub key: String,
70 pub level: CacheLevel,
71 #[serde(default, skip_serializing_if = "Option::is_none")]
73 pub commit: Option<String>,
74 #[serde(default, skip_serializing_if = "Option::is_none")]
76 pub series: Option<String>,
77 pub age_days: u32,
78 pub bytes: u64,
79 #[serde(default)]
81 pub alias: bool,
82}
83
84#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
86#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
87pub struct CacheListPayload {
88 pub rows: Vec<CacheListRow>,
89}
90
91#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
93#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
94pub struct CacheShowPayload {
95 pub key: String,
96 pub level: CacheLevel,
97 pub created_at: String,
98 pub age_days: u32,
99 pub bytes: u64,
100 #[serde(default)]
103 pub alias: bool,
104 pub key_inputs: serde_json::Value,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub verdict_summary: Option<serde_json::Value>,
109 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub value: Option<serde_json::Value>,
112}
113
114#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
116#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
117pub struct CacheMutationPayload {
118 pub removed_entries: u64,
119 pub removed_bytes: u64,
120}