1use serde::{de::DeserializeOwned, Deserialize, Serialize};
2
3pub const COMPRESSION_THRESHOLD: usize = 1024; #[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
8#[serde(rename_all = "lowercase")]
9pub enum CompressionMethod {
10 Zlib,
12 Lzma2,
14}
15
16impl Default for CompressionMethod {
17 fn default() -> Self {
18 Self::Zlib
19 }
20}
21
22#[derive(Debug, Clone, Deserialize, Serialize)]
24#[serde(rename_all = "camelCase")]
25pub struct SetItemOptions {
26 pub ttl: Option<u64>,
28 pub compress: Option<bool>,
30 pub compression_method: Option<CompressionMethod>,
32}
33
34#[derive(Debug, Clone, Deserialize, Serialize)]
36#[serde(rename_all = "camelCase")]
37pub struct CacheItem<T> {
38 pub value: T,
40 pub expires_at: Option<u64>,
42 pub is_compressed: Option<bool>,
44}
45
46#[derive(Debug, Serialize)]
48#[serde(rename_all = "camelCase")]
49pub struct SetRequest<T>
50where
51 T: Serialize + DeserializeOwned,
52{
53 pub key: String,
55 pub value: T,
57 pub options: Option<SetItemOptions>,
59}
60
61impl<'de, T> serde::Deserialize<'de> for SetRequest<T>
62where
63 T: Serialize + DeserializeOwned,
64{
65 fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
66 where
67 D: serde::Deserializer<'de>,
68 {
69 #[derive(Deserialize)]
70 struct Helper {
71 key: String,
72 value: serde_json::Value,
73 options: Option<SetItemOptions>,
74 }
75
76 let helper = Helper::deserialize(deserializer)?;
77
78 let value = serde_json::from_value(helper.value).map_err(serde::de::Error::custom)?;
79
80 Ok(SetRequest {
81 key: helper.key,
82 value,
83 options: helper.options,
84 })
85 }
86}
87
88#[derive(Debug, Deserialize, Serialize)]
90#[serde(rename_all = "camelCase")]
91pub struct GetRequest {
92 pub key: String,
94}
95
96#[derive(Debug, Deserialize, Serialize)]
98#[serde(rename_all = "camelCase")]
99pub struct RemoveRequest {
100 pub key: String,
102}
103
104#[derive(Debug, Deserialize, Serialize)]
106#[serde(rename_all = "camelCase")]
107pub struct HasRequest {
108 pub key: String,
110}
111
112#[derive(Debug, Clone, Default, Deserialize, Serialize)]
114#[serde(rename_all = "camelCase")]
115pub struct CacheStats {
116 pub total_size: usize,
118 pub active_size: usize,
120}
121
122#[derive(Debug, Clone, Default, Deserialize, Serialize)]
124#[serde(rename_all = "camelCase")]
125pub struct BooleanResponse {
126 pub value: bool,
128}
129
130#[derive(Debug, Clone, Default, Deserialize, Serialize)]
132#[serde(rename_all = "camelCase")]
133pub struct EmptyResponse {}
134
135#[derive(Clone, Serialize, Deserialize, Debug)]
137pub struct CompressionConfig {
138 pub enabled: bool,
140 pub level: u32,
142 pub threshold: usize,
144 pub method: CompressionMethod,
146}
147
148impl Default for CompressionConfig {
149 fn default() -> Self {
150 Self {
151 enabled: false,
152 level: 6, threshold: COMPRESSION_THRESHOLD,
154 method: CompressionMethod::Zlib,
155 }
156 }
157}
158
159#[derive(Debug, Clone, Deserialize, Serialize)]
161#[serde(rename_all = "camelCase")]
162pub struct CacheConfig {
163 pub cache_dir: Option<String>,
165 pub cache_file_name: Option<String>,
167 pub cleanup_interval: Option<u64>,
169 pub default_compression: Option<bool>,
171 pub compression_level: Option<u32>,
173 pub compression_threshold: Option<usize>,
175 pub compression_method: Option<CompressionMethod>,
177}
178
179impl Default for CacheConfig {
180 fn default() -> Self {
181 Self {
182 cache_dir: None,
183 cache_file_name: None,
184 cleanup_interval: Some(60), default_compression: Some(true), compression_level: Some(6), compression_threshold: Some(1024), compression_method: Some(CompressionMethod::Zlib), }
190 }
191}