canic_cdk/structures/
btreemap.rs

1pub use ic_stable_structures::btreemap::*;
2
3use derive_more::{Deref, DerefMut};
4use ic_stable_structures::{Memory, Storable, btreemap::BTreeMap as WrappedBTreeMap};
5
6///
7/// BTreeMap
8/// a wrapper around BTreeMap that uses the default VirtualMemory
9///
10
11#[derive(Deref, DerefMut)]
12pub struct BTreeMap<K, V, M>
13where
14    K: Storable + Ord + Clone,
15    V: Storable + Clone,
16    M: Memory,
17{
18    data: WrappedBTreeMap<K, V, M>,
19}
20
21impl<K, V, M> BTreeMap<K, V, M>
22where
23    K: Storable + Ord + Clone,
24    V: Storable + Clone,
25    M: Memory,
26{
27    #[must_use]
28    pub fn init(memory: M) -> Self {
29        Self {
30            data: WrappedBTreeMap::init(memory),
31        }
32    }
33
34    pub fn view(&self) -> impl Iterator<Item = (K, V)> + '_ {
35        self.iter().map(|e| (e.key().clone(), e.value()))
36    }
37
38    /// Collect all key/value pairs into a Vec.
39    pub fn to_vec(&self) -> Vec<(K, V)> {
40        self.iter().map(|e| (e.key().clone(), e.value())).collect()
41    }
42
43    /// clear
44    /// the original clear() method in the ic-stable-structures library
45    /// couldn't be wrapped as it took ownership, so they made a new one
46    pub fn clear(&mut self) {
47        self.clear_new();
48    }
49}