oxcache/traits/
cache_key.rs1pub trait CacheKey: Send + Sync {
37 fn to_key_string(&self) -> String;
47}
48
49impl CacheKey for String {
52 fn to_key_string(&self) -> String {
53 self.clone()
54 }
55}
56
57impl CacheKey for &str {
58 fn to_key_string(&self) -> String {
59 (*self).to_string()
60 }
61}
62
63impl CacheKey for u64 {
64 fn to_key_string(&self) -> String {
65 self.to_string()
66 }
67}
68
69impl CacheKey for u128 {
70 fn to_key_string(&self) -> String {
71 self.to_string()
72 }
73}
74
75impl CacheKey for i64 {
76 fn to_key_string(&self) -> String {
77 self.to_string()
78 }
79}
80
81impl CacheKey for i32 {
82 fn to_key_string(&self) -> String {
83 self.to_string()
84 }
85}
86
87impl CacheKey for u32 {
88 fn to_key_string(&self) -> String {
89 self.to_string()
90 }
91}
92
93impl CacheKey for usize {
94 fn to_key_string(&self) -> String {
95 self.to_string()
96 }
97}
98
99impl CacheKey for isize {
100 fn to_key_string(&self) -> String {
101 self.to_string()
102 }
103}
104
105#[cfg(test)]
106mod tests {
107 use super::*;
108
109 #[test]
110 fn test_string_key() {
111 let key = "user:123".to_string();
112 assert_eq!(key.to_key_string(), "user:123");
113 }
114
115 #[test]
116 fn test_str_key() {
117 let key: &str = "user:123";
118 assert_eq!(key.to_key_string(), "user:123");
119 }
120
121 #[test]
122 fn test_u64_key() {
123 let key: u64 = 12345;
124 assert_eq!(key.to_key_string(), "12345");
125 }
126
127 #[test]
128 fn test_i64_key() {
129 let key: i64 = -12345;
130 assert_eq!(key.to_key_string(), "-12345");
131 }
132
133 #[test]
134 fn test_u128_key() {
135 let key: u128 = 12345678901234567890;
136 assert_eq!(key.to_key_string(), "12345678901234567890");
137 }
138
139 #[test]
140 fn test_i32_key() {
141 let key: i32 = 42;
143 assert_eq!(key.to_key_string(), "42");
144 }
145
146 #[test]
147 fn test_i32_negative_key() {
148 let key: i32 = -99;
149 assert_eq!(key.to_key_string(), "-99");
150 }
151
152 #[test]
153 fn test_i32_max_key() {
154 let key: i32 = i32::MAX;
155 assert_eq!(key.to_key_string(), "2147483647");
156 }
157
158 #[test]
159 fn test_i32_min_key() {
160 let key: i32 = i32::MIN;
161 assert_eq!(key.to_key_string(), "-2147483648");
162 }
163
164 #[test]
165 fn test_u32_key() {
166 let key: u32 = 100;
168 assert_eq!(key.to_key_string(), "100");
169 }
170
171 #[test]
172 fn test_u32_max_key() {
173 let key: u32 = u32::MAX;
174 assert_eq!(key.to_key_string(), "4294967295");
175 }
176
177 #[test]
178 fn test_u32_zero_key() {
179 let key: u32 = 0;
180 assert_eq!(key.to_key_string(), "0");
181 }
182
183 #[test]
184 fn test_usize_key() {
185 let key: usize = 1000;
187 assert_eq!(key.to_key_string(), "1000");
188 }
189
190 #[test]
191 fn test_usize_zero_key() {
192 let key: usize = 0;
193 assert_eq!(key.to_key_string(), "0");
194 }
195
196 #[test]
197 fn test_usize_max_key() {
198 let key: usize = usize::MAX;
199 assert_eq!(key.to_key_string(), usize::MAX.to_string());
200 }
201
202 #[test]
203 fn test_isize_key() {
204 let key: isize = -500;
206 assert_eq!(key.to_key_string(), "-500");
207 }
208
209 #[test]
210 fn test_isize_positive_key() {
211 let key: isize = 500;
212 assert_eq!(key.to_key_string(), "500");
213 }
214
215 #[test]
216 fn test_isize_max_key() {
217 let key: isize = isize::MAX;
218 assert_eq!(key.to_key_string(), isize::MAX.to_string());
219 }
220
221 #[test]
222 fn test_isize_min_key() {
223 let key: isize = isize::MIN;
224 assert_eq!(key.to_key_string(), isize::MIN.to_string());
225 }
226
227 #[test]
228 fn test_string_empty_key() {
229 let key: String = String::new();
230 assert_eq!(key.to_key_string(), "");
231 }
232
233 #[test]
234 fn test_str_empty_key() {
235 let key: &str = "";
236 assert_eq!(key.to_key_string(), "");
237 }
238
239 #[test]
240 fn test_u64_zero_key() {
241 let key: u64 = 0;
242 assert_eq!(key.to_key_string(), "0");
243 }
244
245 #[test]
246 fn test_u64_max_key() {
247 let key: u64 = u64::MAX;
248 assert_eq!(key.to_key_string(), u64::MAX.to_string());
249 }
250
251 #[test]
252 fn test_custom_cache_key_impl() {
253 struct UserId(u64);
254
255 impl CacheKey for UserId {
256 fn to_key_string(&self) -> String {
257 format!("user:{}", self.0)
258 }
259 }
260
261 let user_id = UserId(12345);
262 assert_eq!(user_id.to_key_string(), "user:12345");
263 }
264}