wolfrpg_map_parser/command/
set_variable_command.rs1#[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}