stratus/eth/storage/permanent/rocks/types/
log_mined.rs1use 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 {}