mailtutan_lib/storage/
memory.rs1use crate::models::Message;
2use crate::Storage;
3use std::collections::HashMap;
4
5#[derive(Default)]
6pub struct Memory {
7 sequence_id: usize,
8 messages_limit: usize,
9 records: HashMap<usize, Message>,
10}
11
12impl Memory {
13 pub fn new(capacity: usize) -> Self {
14 Self {
15 records: HashMap::new(),
16 sequence_id: 1,
17 messages_limit: capacity,
18 }
19 }
20}
21
22impl Storage for Memory {
23 fn list(&self) -> Vec<Message> {
24 let mut list: Vec<Message> = vec![];
25
26 for record in self.records.values() {
27 list.push(record.clone());
28 }
29
30 list
31 }
32
33 fn add(&mut self, mut message: Message) -> Message {
34 message.id = Some(self.sequence_id);
35
36 self.records.insert(self.sequence_id, message.clone());
37
38 if self.size() > self.messages_limit {
39 let record_to_delete = self.sequence_id - self.messages_limit;
40 self.remove(record_to_delete);
41 }
42
43 self.sequence_id += 1;
44
45 message
46 }
47
48 fn get(&self, item: usize) -> Message {
49 self.records.get(&item).unwrap().clone()
50 }
51
52 fn remove(&mut self, item: usize) {
53 self.records.remove(&item).unwrap();
54 }
55
56 fn size(&self) -> usize {
57 self.records.len()
58 }
59
60 fn delete_all(&mut self) {
61 self.records.clear()
62 }
63}