oasis_runtime_sdk/storage/
mkvs.rs

1use oasis_core_runtime::storage::mkvs;
2
3use super::{NestedStore, Store};
4
5/// A key-value store backed by MKVS.
6pub struct MKVSStore<M: mkvs::MKVS> {
7    parent: M,
8}
9
10impl<M: mkvs::MKVS> MKVSStore<M> {
11    pub fn new(parent: M) -> Self {
12        Self { parent }
13    }
14}
15
16impl<M: mkvs::MKVS> Store for MKVSStore<M> {
17    fn get(&self, key: &[u8]) -> Option<Vec<u8>> {
18        self.parent.get(key)
19    }
20
21    fn insert(&mut self, key: &[u8], value: &[u8]) {
22        self.parent.insert(key, value);
23    }
24
25    fn remove(&mut self, key: &[u8]) {
26        self.parent.remove(key);
27    }
28
29    fn iter(&self) -> Box<dyn mkvs::Iterator + '_> {
30        self.parent.iter()
31    }
32
33    fn prefetch_prefixes(&mut self, prefixes: Vec<mkvs::Prefix>, limit: u16) {
34        self.parent.prefetch_prefixes(&prefixes, limit);
35    }
36}
37
38impl<M: mkvs::MKVS> NestedStore for MKVSStore<M> {
39    type Inner = M;
40
41    fn commit(self) -> Self::Inner {
42        // Commit is not needed.
43        self.parent
44    }
45
46    fn rollback(self) -> Self::Inner {
47        panic!("attempted to rollback a non-transactional store");
48    }
49
50    fn has_pending_updates(&self) -> bool {
51        true
52    }
53
54    fn pending_update_byte_size(&self) -> usize {
55        0
56    }
57}