tiny_counter/storage/
memory.rs1use std::collections::HashMap;
2
3use crate::{Result, Storage};
4
5pub struct MemoryStorage {
10 data: HashMap<String, Vec<u8>>,
11}
12
13impl MemoryStorage {
14 pub fn new() -> Self {
16 Self {
17 data: HashMap::new(),
18 }
19 }
20}
21
22impl Default for MemoryStorage {
23 fn default() -> Self {
24 Self::new()
25 }
26}
27
28impl Storage for MemoryStorage {
29 fn save(&mut self, key: &str, data: Vec<u8>) -> Result<()> {
30 self.data.insert(key.to_string(), data);
31 Ok(())
32 }
33
34 fn load(&self, key: &str) -> Result<Option<Vec<u8>>> {
35 Ok(self.data.get(key).cloned())
36 }
37
38 fn delete(&mut self, key: &str) -> Result<()> {
39 self.data.remove(key);
40 Ok(())
41 }
42
43 fn list_keys(&self) -> Result<Vec<String>> {
44 Ok(self.data.keys().cloned().collect())
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_save_then_load_returns_same_data() {
54 let mut storage = MemoryStorage::new();
55 let data = vec![1, 2, 3, 4, 5];
56
57 storage.save("test_key", data.clone()).unwrap();
58 let loaded = storage.load("test_key").unwrap();
59
60 assert_eq!(loaded, Some(data));
61 }
62
63 #[test]
64 fn test_load_nonexistent_key_returns_none() {
65 let storage = MemoryStorage::new();
66 let loaded = storage.load("nonexistent").unwrap();
67 assert_eq!(loaded, None);
68 }
69
70 #[test]
71 fn test_delete_removes_data() {
72 let mut storage = MemoryStorage::new();
73 let data = vec![1, 2, 3];
74
75 storage.save("test_key", data).unwrap();
76 storage.delete("test_key").unwrap();
77
78 let loaded = storage.load("test_key").unwrap();
79 assert_eq!(loaded, None);
80 }
81
82 #[test]
83 fn test_save_overwrites_existing_key() {
84 let mut storage = MemoryStorage::new();
85 let data1 = vec![1, 2, 3];
86 let data2 = vec![4, 5, 6];
87
88 storage.save("test_key", data1).unwrap();
89 storage.save("test_key", data2.clone()).unwrap();
90
91 let loaded = storage.load("test_key").unwrap();
92 assert_eq!(loaded, Some(data2));
93 }
94
95 #[test]
96 fn test_default_trait() {
97 let storage = MemoryStorage::default();
98 let loaded = storage.load("any_key").unwrap();
99 assert_eq!(loaded, None);
100 }
101}