fuel_core/state/
key_value_view.rs

1use fuel_core_storage::{
2    Result as StorageResult,
3    kv_store::{
4        KeyValueInspect,
5        StorageColumn,
6        Value,
7    },
8};
9use std::sync::Arc;
10
11#[derive(Clone)]
12pub struct KeyValueViewWrapper<Column>(
13    Arc<dyn KeyValueInspect<Column = Column> + Sync + Send>,
14);
15
16impl<Column> std::fmt::Debug for KeyValueViewWrapper<Column> {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> core::fmt::Result {
18        f.debug_struct("KeyValueViewWrapper").finish()
19    }
20}
21
22impl<Column> KeyValueViewWrapper<Column> {
23    pub fn new<S>(storage: S) -> Self
24    where
25        S: KeyValueInspect<Column = Column> + Send + Sync + 'static,
26    {
27        Self(Arc::new(storage))
28    }
29}
30
31impl<Column> KeyValueInspect for KeyValueViewWrapper<Column>
32where
33    Column: StorageColumn,
34{
35    type Column = Column;
36
37    fn exists(&self, key: &[u8], column: Self::Column) -> StorageResult<bool> {
38        self.0.exists(key, column)
39    }
40
41    fn size_of_value(
42        &self,
43        key: &[u8],
44        column: Self::Column,
45    ) -> StorageResult<Option<usize>> {
46        self.0.size_of_value(key, column)
47    }
48
49    fn get(&self, key: &[u8], column: Self::Column) -> StorageResult<Option<Value>> {
50        self.0.get(key, column)
51    }
52
53    fn read(
54        &self,
55        key: &[u8],
56        column: Self::Column,
57        offset: usize,
58        buf: &mut [u8],
59    ) -> StorageResult<bool> {
60        self.0.read(key, column, offset, buf)
61    }
62}