icydb_core/db/data/
store.rs1use crate::db::data::{CanonicalRow, DataKey, RawDataKey, RawRow};
7use canic_cdk::structures::{BTreeMap, DefaultMemoryImpl, memory::VirtualMemory};
8use derive_more::Deref;
9
10#[derive(Deref)]
20pub struct DataStore(BTreeMap<RawDataKey, RawRow, VirtualMemory<DefaultMemoryImpl>>);
21
22impl DataStore {
23 #[must_use]
25 pub fn init(memory: VirtualMemory<DefaultMemoryImpl>) -> Self {
26 Self(BTreeMap::init(memory))
27 }
28
29 pub(in crate::db) fn insert(&mut self, key: RawDataKey, row: CanonicalRow) -> Option<RawRow> {
31 self.0.insert(key, row.into_raw_row())
32 }
33
34 #[cfg(test)]
36 pub(crate) fn insert_raw_for_test(&mut self, key: RawDataKey, row: RawRow) -> Option<RawRow> {
37 self.0.insert(key, row)
38 }
39
40 pub fn remove(&mut self, key: &RawDataKey) -> Option<RawRow> {
42 self.0.remove(key)
43 }
44
45 pub fn get(&self, key: &RawDataKey) -> Option<RawRow> {
47 self.0.get(key)
48 }
49
50 pub fn clear(&mut self) {
52 self.0.clear();
53 }
54
55 pub fn memory_bytes(&self) -> u64 {
57 self.iter()
59 .map(|entry| DataKey::STORED_SIZE_BYTES + entry.value().len() as u64)
60 .sum()
61 }
62}