Skip to main content

blockworx_router/
event.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
2pub enum EventSense {
3    Enter,
4    Scan,
5    Exit,
6}
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
9pub struct Event<T, C> {
10    time: T,
11    sense: EventSense,
12    payload: C,
13}
14
15impl<T: Copy, C: Copy> Event<T, C> {
16    pub fn sense(&self) -> EventSense {
17        self.sense
18    }
19    pub fn t(&self) -> T {
20        self.time
21    }
22    pub fn cost(&self) -> C {
23        self.payload
24    }
25    pub fn count(&self) -> i32 {
26        match self.sense {
27            EventSense::Enter => 1,
28            EventSense::Exit => -1,
29            EventSense::Scan => 0,
30        }
31    }
32    pub fn is_enter(&self) -> bool {
33        matches!(self.sense, EventSense::Enter)
34    }
35    pub fn enter(time: T, payload: C) -> Self {
36        Event {
37            time,
38            sense: EventSense::Enter,
39            payload,
40        }
41    }
42    pub fn exit(time: T, payload: C) -> Self {
43        Event {
44            time,
45            sense: EventSense::Exit,
46            payload,
47        }
48    }
49    pub fn scan(time: T, payload: C) -> Self {
50        Event {
51            time,
52            sense: EventSense::Scan,
53            payload,
54        }
55    }
56}