serial.rs

 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}