stratus/eth/storage/permanent/rocks/types/
slot.rs

1use std::fmt::Debug;
2
3use crate::eth::primitives::SlotIndex;
4use crate::eth::primitives::SlotValue;
5use crate::eth::storage::permanent::rocks::SerializeDeserializeWithContext;
6
7#[derive(Clone, Debug, Copy, Default, PartialEq, Eq, bincode::Encode, bincode::Decode, serde::Deserialize, serde::Serialize)]
8#[cfg_attr(test, derive(fake::Dummy))]
9pub struct SlotValueRocksdb([u64; 4]);
10
11impl From<SlotValue> for SlotValueRocksdb {
12    fn from(item: SlotValue) -> Self {
13        SlotValueRocksdb(item.0.into_limbs())
14    }
15}
16
17impl From<SlotValueRocksdb> for SlotValue {
18    fn from(item: SlotValueRocksdb) -> Self {
19        SlotValue::from(item.0)
20    }
21}
22
23#[derive(Clone, Debug, Copy, Default, Hash, PartialEq, Eq, PartialOrd, Ord, bincode::Encode, bincode::Decode)]
24#[cfg_attr(test, derive(fake::Dummy))]
25pub struct SlotIndexRocksdb([u64; 4]);
26
27impl From<SlotIndex> for SlotIndexRocksdb {
28    fn from(item: SlotIndex) -> Self {
29        SlotIndexRocksdb(item.0.into_limbs())
30    }
31}
32
33impl From<SlotIndexRocksdb> for SlotIndex {
34    fn from(item: SlotIndexRocksdb) -> Self {
35        SlotIndex::from(item.0)
36    }
37}
38
39impl serde::Serialize for SlotIndexRocksdb {
40    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
41    where
42        S: serde::Serializer,
43    {
44        let slot_index: SlotIndex = (*self).into();
45        slot_index.serialize(serializer)
46    }
47}
48
49impl<'de> serde::Deserialize<'de> for SlotIndexRocksdb {
50    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
51    where
52        D: serde::Deserializer<'de>,
53    {
54        let slot_index = SlotIndex::deserialize(deserializer)?;
55        Ok(slot_index.into())
56    }
57}
58
59impl SerializeDeserializeWithContext for SlotValueRocksdb {}
60impl SerializeDeserializeWithContext for SlotIndexRocksdb {}