Skip to content

Commit 9a03668

Browse files
refactor: response line sorting
1 parent f748463 commit 9a03668

2 files changed

Lines changed: 33 additions & 10 deletions

File tree

src/cli/server_subcommands.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ pub(crate) fn handle_server_subcommand( cmd: ServerSubcommands, options: CliOpti
8989
rw3d_core::commands::scripts_root_path()
9090
}
9191
ServerSubcommands::Modlist => {
92-
//TODO would be nice to have these mod actually sorted alphabetically at least
9392
response_handler = Box::new(ModlistPrinter());
9493
rw3d_core::commands::mod_list()
9594
}
@@ -98,7 +97,6 @@ pub(crate) fn handle_server_subcommand( cmd: ServerSubcommands, options: CliOpti
9897
rw3d_core::commands::opcode(func_name, class_name)
9998
}
10099
ServerSubcommands::Varlist { section, name } => {
101-
//TODO would be nice to have some option to sort those values
102100
response_handler = Box::new(VarlistPrinter());
103101
rw3d_core::commands::var_list(section, name)
104102
}

src/core/utils.rs

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ pub enum ScriptsReloadResponseType {
2828
pub fn scripts_reload_response_type(response: &WitcherPacket) -> Result<ScriptsReloadResponseType, String> {
2929

3030
fn file_line_msg(response: &WitcherPacket) -> (String, String, String) {
31-
let file = format!("{}", response.payload[3] );
32-
let line = format!("{}", response.payload[2] );
33-
let msg = format!("{}", response.payload[4] );
31+
let file = response.payload[3].to_string();
32+
let line = response.payload[2].to_string();
33+
let msg = response.payload[4].to_string();
3434

3535
(file, line, msg)
3636
}
@@ -40,7 +40,7 @@ pub fn scripts_reload_response_type(response: &WitcherPacket) -> Result<ScriptsR
4040
return Ok(ScriptsReloadResponseType::Started);
4141
}
4242
else if response.payload[1] == WitcherPacketData::StringUTF8("log".to_string()) {
43-
return Ok(ScriptsReloadResponseType::Log( format!("{}", response.payload[2]) ));
43+
return Ok(ScriptsReloadResponseType::Log( response.payload[2].to_string() ));
4444
}
4545
else if response.payload[1] == WitcherPacketData::StringUTF8("warn".to_string()) {
4646
let (file, line, msg) = file_line_msg(response);
@@ -93,7 +93,7 @@ pub fn scripts_root_path_formatter(response: &WitcherPacket) -> String {
9393
if response.payload.len() > 2
9494
&& response.payload[0] == WitcherPacketData::StringUTF8("ScriptCompiler".to_string())
9595
&& response.payload[1] == WitcherPacketData::StringUTF8("RootPathConfirm".to_string()) {
96-
return format!("{}", response.payload[2] );
96+
return response.payload[2].to_string();
9797
}
9898

9999
default_formatter(response)
@@ -102,7 +102,7 @@ pub fn scripts_root_path_formatter(response: &WitcherPacket) -> String {
102102

103103
pub fn scripts_execute_formatter(response: &WitcherPacket) -> String {
104104
if response.payload.len() > 2 {
105-
return format!("{}", response.payload[2] );
105+
return response.payload[2].to_string();
106106
}
107107

108108
default_formatter(response)
@@ -119,12 +119,17 @@ pub fn mod_list_formatter(response: &WitcherPacket) -> String {
119119
result += &format!("Mods installed: {}\n", installed);
120120
}
121121

122+
let mut mods = Vec::new();
122123
if response.payload.len() > 3 {
123124
for i in (3 .. response.payload.len()).step_by(2) {
124-
result += &format!("{}\n", response.payload[i]);
125+
let mod_name = response.payload[i].to_string();
126+
mods.push(mod_name);
125127
}
126128
}
127129

130+
mods.sort();
131+
mods.iter().for_each(|m| result += &format!("{}\n", m));
132+
128133
return result;
129134
}
130135

@@ -145,6 +150,12 @@ pub fn opcode_formatter(response: &WitcherPacket) -> String {
145150
}
146151

147152

153+
struct VarlistEntry {
154+
pub section: String,
155+
pub variable: String,
156+
pub value: String
157+
}
158+
148159
pub fn var_list_formatter(response: &WitcherPacket) -> String {
149160
if response.payload.len() > 4
150161
&& response.payload[1] == WitcherPacketData::StringUTF8("vars".to_string()) {
@@ -155,10 +166,24 @@ pub fn var_list_formatter(response: &WitcherPacket) -> String {
155166
result += &format!("{:40}| {:45}| {}\n", "Section", "Variable", "Value");
156167
result += &tab_line;
157168

169+
let mut entries = Vec::new();
158170
for i in (4 .. response.payload.len()).step_by(5) {
159-
result += &format!("{:40}| {:45}| {}\n", response.payload[i+1], response.payload[i], response.payload[i+2]);
171+
entries.push( VarlistEntry{
172+
section: response.payload[i+1].to_string(),
173+
variable: response.payload[i].to_string(),
174+
value: response.payload[i+2].to_string()
175+
});
160176
}
161177

178+
entries.sort_by(|e1, e2| {
179+
match e1.section.cmp(&e2.section) {
180+
std::cmp::Ordering::Equal => e1.variable.cmp(&e2.variable),
181+
other => other
182+
}
183+
});
184+
185+
entries.iter().for_each(|e| result += &format!("{:40}| {:45}| {}\n", e.section, e.variable, e.value) );
186+
162187
return result;
163188
}
164189

0 commit comments

Comments
 (0)