wolfrpg_map_parser/command/input_key_command/input_toggle/
device.rs1#[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; offset += 1; 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}