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