1use alloy::primitives::TxHash;
2
3#[derive(Clone, Debug)]
5pub struct BlockEvents<T> {
6 instant: super::StateInstant,
7 events: Vec<T>,
8}
9
10#[derive(Clone, Debug)]
12pub struct EventContext<T> {
13 pub(crate) tx_hash: TxHash,
14 pub(crate) tx_index: u64,
15 pub(crate) log_index: u64,
16 pub(crate) event: T,
17}
18
19impl<T> BlockEvents<T> {
20 pub fn new(instant: super::StateInstant, events: Vec<T>) -> Self { Self { instant, events } }
21
22 pub fn instant(&self) -> super::StateInstant { self.instant }
24
25 pub fn events(&self) -> &[T] { &self.events }
27}
28
29impl<T> EventContext<T> {
30 pub fn new(tx_hash: TxHash, tx_index: u64, log_index: u64, event: T) -> Self {
31 Self { tx_hash, tx_index, log_index, event }
32 }
33
34 pub(crate) fn empty(event: T) -> Self {
35 Self { tx_hash: TxHash::ZERO, tx_index: 0, log_index: 0, event }
36 }
37
38 pub fn tx_hash(&self) -> TxHash { self.tx_hash }
39
40 pub fn tx_index(&self) -> u64 { self.tx_index }
41
42 pub fn log_index(&self) -> u64 { self.log_index }
43
44 pub fn event(&self) -> &T { &self.event }
45
46 pub(crate) fn pass<O>(&self, other: O) -> EventContext<O> {
47 EventContext {
48 tx_hash: self.tx_hash,
49 tx_index: self.tx_index,
50 log_index: self.log_index,
51 event: other,
52 }
53 }
54}