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

1use std::fmt::Debug;
2
3use super::block_number::BlockNumberRocksdb;
4use super::hash::HashRocksdb;
5use super::log::LogRocksdb;
6use crate::eth::primitives::Index;
7use crate::eth::primitives::Log;
8use crate::eth::primitives::LogMessage;
9use crate::eth::storage::permanent::rocks::SerializeDeserializeWithContext;
10use crate::ext::OptionExt;
11
12#[derive(Debug, Clone, PartialEq, Eq, bincode::Encode, bincode::Decode, serde::Serialize, serde::Deserialize)]
13#[cfg_attr(test, derive(fake::Dummy))]
14pub struct LogMinedRocksdb {
15    pub log: LogRocksdb,
16    pub index: u64,
17}
18
19impl From<(Log, Index)> for LogMinedRocksdb {
20    fn from((log, index): (Log, Index)) -> Self {
21        let index = index.into();
22        Self { log: log.into(), index }
23    }
24}
25
26impl From<LogMinedRocksdb> for Log {
27    fn from(value: LogMinedRocksdb) -> Self {
28        Self {
29            address: value.log.address.into(),
30            topic0: value.log.topics.0.map_into(),
31            topic1: value.log.topics.1.map_into(),
32            topic2: value.log.topics.2.map_into(),
33            topic3: value.log.topics.3.map_into(),
34            data: value.log.data.into(),
35        }
36    }
37}
38
39impl LogMessage {
40    pub fn from_rocks_primitives(
41        log: LogMinedRocksdb,
42        block_number: BlockNumberRocksdb,
43        block_hash: HashRocksdb,
44        tx_index: usize,
45        tx_hash: HashRocksdb,
46    ) -> Self {
47        let index = log.index.into();
48        Self {
49            block_number: block_number.into(),
50            block_hash: block_hash.into(),
51            log: log.into(),
52            transaction_hash: tx_hash.into(),
53            transaction_index: Index::from(tx_index as u64),
54            index,
55        }
56    }
57}
58
59impl SerializeDeserializeWithContext for LogMinedRocksdb {}