oasis_runtime_sdk/storage/
hashed.rs1use std::marker::PhantomData;
2
3use oasis_core_runtime::storage::mkvs;
4
5use super::Store;
6
7pub struct HashedStore<S: Store, D: digest::Digest> {
9 parent: S,
10 _digest: PhantomData<D>,
11}
12
13impl<S: Store, D: digest::Digest> HashedStore<S, D> {
14 pub fn new(parent: S) -> Self {
16 Self {
17 parent,
18 _digest: PhantomData,
19 }
20 }
21}
22
23impl<S: Store, D: digest::Digest> Store for HashedStore<S, D> {
24 fn get(&self, key: &[u8]) -> Option<Vec<u8>> {
25 self.parent.get(&[&D::digest(key), key].concat())
26 }
27
28 fn insert(&mut self, key: &[u8], value: &[u8]) {
29 self.parent.insert(&[&D::digest(key), key].concat(), value);
30 }
31
32 fn remove(&mut self, key: &[u8]) {
33 self.parent.remove(&[&D::digest(key), key].concat());
34 }
35
36 fn iter(&self) -> Box<dyn mkvs::Iterator + '_> {
37 self.parent.iter()
38 }
39
40 fn prefetch_prefixes(&mut self, prefixes: Vec<mkvs::Prefix>, limit: u16) {
41 self.parent.prefetch_prefixes(prefixes, limit);
42 }
43}