1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
use crate::{
Mappable, MerkleRoot, MerkleRootStorage, StorageInspect, StorageMut, StorageMutate, StorageRef,
};
use alloc::borrow::Cow;
impl<'a, T: StorageInspect<Type> + ?Sized, Type: Mappable> StorageInspect<Type> for &'a T {
type Error = T::Error;
fn get(&self, key: &Type::Key) -> Result<Option<Cow<'_, Type::GetValue>>, Self::Error> {
<T as StorageInspect<Type>>::get(self, key)
}
fn contains_key(&self, key: &Type::Key) -> Result<bool, Self::Error> {
<T as StorageInspect<Type>>::contains_key(self, key)
}
}
impl<'a, T: StorageInspect<Type> + ?Sized, Type: Mappable> StorageInspect<Type> for &'a mut T {
type Error = T::Error;
fn get(&self, key: &Type::Key) -> Result<Option<Cow<'_, Type::GetValue>>, Self::Error> {
<T as StorageInspect<Type>>::get(self, key)
}
fn contains_key(&self, key: &Type::Key) -> Result<bool, Self::Error> {
<T as StorageInspect<Type>>::contains_key(self, key)
}
}
impl<'a, T: StorageMutate<Type> + ?Sized, Type: Mappable> StorageMutate<Type> for &'a mut T {
fn insert(
&mut self,
key: &Type::Key,
value: &Type::SetValue,
) -> Result<Option<Type::GetValue>, Self::Error> {
<T as StorageMutate<Type>>::insert(self, key, value)
}
fn remove(&mut self, key: &Type::Key) -> Result<Option<Type::GetValue>, Self::Error> {
<T as StorageMutate<Type>>::remove(self, key)
}
}
impl<'a, T: MerkleRootStorage<Key, Type> + ?Sized, Key, Type: Mappable> MerkleRootStorage<Key, Type>
for &'a mut T
{
fn root(&mut self, key: &Key) -> Result<MerkleRoot, Self::Error> {
<T as MerkleRootStorage<Key, Type>>::root(self, key)
}
}
impl<'a, T: StorageInspect<Type>, Type: Mappable> StorageRef<'a, T, Type> {
#[inline(always)]
pub fn get(self, key: &Type::Key) -> Result<Option<Cow<'a, Type::GetValue>>, T::Error> {
self.0.get(key)
}
#[inline(always)]
pub fn contains_key(self, key: &Type::Key) -> Result<bool, T::Error> {
self.0.contains_key(key)
}
}
impl<'a, T: StorageInspect<Type>, Type: Mappable> StorageMut<'a, T, Type> {
#[inline(always)]
pub fn get(self, key: &Type::Key) -> Result<Option<Cow<'a, Type::GetValue>>, T::Error> {
let self_: &'a T = self.0;
self_.get(key)
}
#[inline(always)]
pub fn contains_key(self, key: &Type::Key) -> Result<bool, T::Error> {
self.0.contains_key(key)
}
}
impl<'a, T: StorageMutate<Type>, Type: Mappable> StorageMut<'a, T, Type> {
#[inline(always)]
pub fn insert(
self,
key: &Type::Key,
value: &Type::SetValue,
) -> Result<Option<Type::GetValue>, T::Error> {
self.0.insert(key, value)
}
#[inline(always)]
pub fn remove(self, key: &Type::Key) -> Result<Option<Type::GetValue>, T::Error> {
self.0.remove(key)
}
}
impl<'a, T: StorageMutate<Type>, Type: Mappable> StorageMut<'a, T, Type> {
#[inline(always)]
pub fn root<Key>(self, key: &Key) -> Result<MerkleRoot, T::Error>
where
T: MerkleRootStorage<Key, Type>,
{
self.0.root(key)
}
}