wolfrpg_map_parser/command/
set_variable_command.rs

1#[cfg(feature = "serde")]
2use serde::{Serialize, Deserialize};
3use state::State;
4use crate::byte_utils::as_u32_le;
5use crate::command::set_variable_command::operators::Operators;
6use crate::command::set_variable_command::options::Options;
7pub mod base;
8pub mod assignment;
9pub mod calculation;
10pub mod options;
11pub mod operators;
12pub mod range;
13pub mod state;
14pub mod db;
15
16#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17#[derive(PartialEq, Clone)]
18pub struct SetVariableCommand {
19    variable: u32,
20    left_side: u32,
21    right_side: u32,
22    options: Options,
23    operators: Operators,
24    state: State
25}
26
27impl SetVariableCommand {
28    fn parse(bytes: &[u8], parse_state: fn(&[u8]) -> (usize, State)) -> (usize, Self) {
29        let mut offset: usize = 0;
30
31        let variable: u32 = as_u32_le(&bytes[offset..offset + 4]);
32        offset += 4;
33
34        let left_side: u32 = as_u32_le(&bytes[offset..offset + 4]);
35        offset += 4;
36
37        let right_side: u32 = as_u32_le(&bytes[offset..offset + 4]);
38        offset += 4;
39
40        let options: u8 = bytes[offset];
41        let options: Options = Options::new(options);
42        offset += 1;
43
44        let operators: u8 = bytes[offset];
45        let operators: Operators = Operators::new(operators);
46        offset += 1;
47
48        let (bytes_read, state): (usize, State) = parse_state(&bytes[offset..]);
49
50        offset += bytes_read;
51
52        (offset, Self {
53            variable,
54            left_side,
55            right_side,
56            options,
57            operators,
58            state
59        })
60    }
61
62    pub(crate) fn parse_base(bytes: &[u8]) -> (usize, Self) {
63        Self::parse(bytes, State::parse_base)
64    }
65
66    pub(crate) fn parse_range(bytes: &[u8]) -> (usize, Self) {
67        Self::parse(bytes, State::parse_range)
68    }
69
70    pub(crate) fn parse_db(bytes: &[u8]) -> (usize, Self) {
71        Self::parse(bytes, State::parse_db)
72    }
73
74    pub fn variable(&self) -> u32 {
75        self.variable
76    }
77
78    pub fn variable_mut(&mut self) -> &mut u32 {
79        &mut self.variable
80    }
81
82    pub fn left_side(&self) -> u32 {
83        self.left_side
84    }
85
86    pub fn left_side_mut(&mut self) -> &mut u32 {
87        &mut self.left_side
88    }
89
90    pub fn right_side(&self) -> u32 {
91        self.right_side
92    }
93
94    pub fn right_side_mut(&mut self) -> &mut u32 {
95        &mut self.right_side
96    }
97
98    pub fn options(&self) -> &Options {
99        &self.options
100    }
101
102    pub fn options_mut(&mut self) -> &mut Options {
103        &mut self.options
104    }
105
106    pub fn operators(&self) -> &Operators {
107        &self.operators
108    }
109
110    pub fn operators_mut(&mut self) -> &mut Operators {
111        &mut self.operators
112    }
113
114    pub fn state(&self) -> &State {
115        &self.state
116    }
117
118    pub fn state_mut(&mut self) -> &mut State {
119        &mut self.state
120    }
121}