wolfrpg_map_parser/command/input_key_command/input_toggle/
device.rs

1#[cfg(feature = "serde")]
2use serde::{Serialize, Deserialize};
3use crate::byte_utils::as_u32_le;
4use crate::command::input_key_command::input_toggle::device_inputs::DeviceInputs;
5
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[derive(PartialEq, Clone)]
8pub struct Device {
9    inputs: DeviceInputs,
10    enable: bool,
11    key_code: Option<u32>
12}
13
14impl Device {
15    pub(crate) fn parse(bytes: &[u8]) -> (usize, Self) {
16        let mut offset: usize = 0;
17
18        let inputs: u8 = bytes[offset];
19        let inputs: DeviceInputs = DeviceInputs::new(inputs);
20        offset += 1;
21
22        let enable: bool = bytes[offset] == 0;
23        offset += 1;
24
25        offset += 1; // Padding
26
27        offset += 1; // input_type
28
29        let key_code: Option<u32> = match inputs {
30            DeviceInputs::KeyboardKey => {
31                let key_code: u32 = as_u32_le(&bytes[offset..offset + 4]);
32                offset += 4;
33
34                Some(key_code)
35            }
36
37            _ => None,
38        };
39
40        (offset, Self {
41            inputs,
42            enable,
43            key_code
44        })
45    }
46
47    pub fn inputs(&self) -> &DeviceInputs {
48        &self.inputs
49    }
50
51    pub fn inputs_mut(&mut self) -> &mut DeviceInputs {
52        &mut self.inputs
53    }
54
55    pub fn enable(&self) -> bool {
56        self.enable
57    }
58
59    pub fn enable_mut(&mut self) -> &mut bool {
60        &mut self.enable
61    }
62
63    pub fn key_code(&self) -> Option<u32> {
64        self.key_code
65    }
66
67    pub fn key_code_mut(&mut self) -> &mut Option<u32> {
68        &mut self.key_code
69    }
70}