1use collections::HashMap;
2
3#[derive(Debug, Hash, PartialEq, Eq)]
4pub(crate) enum SerialKind {
5 DataDevice,
6 InputMethod,
7 MouseEnter,
8 MousePress,
9 KeyEnter,
10 KeyPress,
11}
12
13#[derive(Debug)]
14struct SerialData {
15 serial: u32,
16}
17
18impl SerialData {
19 fn new(value: u32) -> Self {
20 Self { serial: value }
21 }
22}
23
24#[derive(Debug)]
25/// Helper for tracking of different serial kinds.
26pub(crate) struct SerialTracker {
27 serials: HashMap<SerialKind, SerialData>,
28}
29
30impl SerialTracker {
31 pub fn new() -> Self {
32 Self {
33 serials: HashMap::default(),
34 }
35 }
36
37 pub fn update(&mut self, kind: SerialKind, value: u32) {
38 self.serials.insert(kind, SerialData::new(value));
39 }
40
41 /// Returns the latest tracked serial of the provided [`SerialKind`]
42 ///
43 /// Will return 0 if not tracked.
44 pub fn get(&self, kind: SerialKind) -> u32 {
45 self.serials
46 .get(&kind)
47 .map(|serial_data| serial_data.serial)
48 .unwrap_or(0)
49 }
50}