wolfrpg_map_parser/command/set_string_command/
base.rs

1use crate::byte_utils::parse_string;
2#[cfg(feature = "serde")]
3use serde::{Serialize, Deserialize};
4
5#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
6#[derive(PartialEq, Clone)]
7pub struct Base {
8    string: String,
9    replace: Option<String>
10}
11
12impl Base {
13    pub(crate) fn parse(bytes: &[u8]) -> (usize, Self) {
14        let mut offset: usize = 0;
15
16        offset += 1; // Unknown, most probably padding
17
18        let string_count: u8 = bytes[offset];
19        offset += 1;
20
21        let (bytes_read, string): (usize, String) = parse_string(&bytes[offset..]);
22        offset += bytes_read;
23
24        let replace: Option<String> = if string_count == 2 {
25            let (bytes_read, replace): (usize, String) = parse_string(&bytes[offset..]);
26            offset += bytes_read;
27
28            Some(replace)
29        } else {
30            None
31        };
32
33        offset += 1; // Command end signature
34
35        (offset, Self {
36            string,
37            replace
38        })
39    }
40
41    pub fn string(&self) -> &str {
42        &self.string
43    }
44
45    pub fn string_mut(&mut self) -> &mut String {
46        &mut self.string
47    }
48
49    pub fn replace(&self) -> &Option<String> {
50        &self.replace
51    }
52
53    pub fn replace_mut(&mut self) -> &mut Option<String> {
54        &mut self.replace
55    }
56}