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}