Skip to main content

perpl_sdk/types/
event.rs

1use alloy::primitives::TxHash;
2
3/// Events from a specific block.
4#[derive(Clone, Debug)]
5pub struct BlockEvents<T> {
6    instant: super::StateInstant,
7    events: Vec<T>,
8}
9
10/// Event along with transaction context.
11#[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    /// Instant the events produced at.
23    pub fn instant(&self) -> super::StateInstant { self.instant }
24
25    /// Raw exchange events
26    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}