fuel_core/state/
key_value_view.rs1use 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}