msg_store_database_in_memory_plugin/
lib.rs1use 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 }
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}