oasis_runtime_sdk/storage/
mkvs.rs1use oasis_core_runtime::storage::mkvs;
2
3use super::{NestedStore, Store};
4
5pub 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 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}