msg_store_database_in_memory_plugin/
lib.rs

1use bytes::Bytes;
2use msg_store_uuid::Uuid;
3use msg_store_database_plugin::{Db, DatabaseError, DatabaseErrorTy};
4use std::collections::BTreeMap;
5use std::sync::Arc;
6
7macro_rules! memdb_error {
8    ($err_ty:expr) => {
9        DatabaseError {
10            err_ty: $err_ty,
11            file: file!(),
12            line: line!(),
13            msg: None
14        }
15    };
16    // ($err_ty:expr, $msg:expr) => {
17    //     DatabaseError {
18    //         err_ty: $err_ty,
19    //         file: file!(),
20    //         line: line!(),
21    //         msg: Some($msg.to_string())
22    //     }
23    // };
24}
25
26pub struct MemDb {
27    msgs: BTreeMap<Arc<Uuid>, Bytes>,
28    byte_size_data: BTreeMap<Arc<Uuid>, u64>
29}
30impl MemDb {
31    pub fn new() -> MemDb {
32        MemDb {
33            msgs: BTreeMap::new(),
34            byte_size_data: BTreeMap::new()
35        }
36    }
37}
38impl Db for MemDb {
39    fn add(&mut self, uuid: Arc<Uuid>, msg: Bytes, msg_byte_size: u64) -> Result<(), DatabaseError> {
40        self.msgs.insert(uuid.clone(), msg);
41        self.byte_size_data.insert(uuid, msg_byte_size);
42        Ok(())
43    }
44    fn get(&mut self, uuid: Arc<Uuid>) -> Result<Bytes, DatabaseError> {
45        match self.msgs.get(&uuid) {
46            Some(msg) => Ok(msg.clone()),
47            None => Err(memdb_error!(DatabaseErrorTy::MsgNotFound))
48        }
49    }
50    fn del(&mut self, uuid: Arc<Uuid>) -> Result<(), DatabaseError> {
51        self.msgs.remove(&uuid);
52        self.byte_size_data.remove(&uuid);
53        Ok(())
54    }
55    fn fetch(&mut self) -> Result<Vec<(Arc<Uuid>, u64)>, DatabaseError> {
56        let mut export = vec![];
57        for (uuid, byte_size) in self.byte_size_data.iter() {
58            export.push((uuid.clone(), *byte_size));
59        }
60        Ok(export)
61    }
62}