Skip to content

Commit 31f892f

Browse files
committed
Add autogenerated names for upgrade planners
1 parent 46f4889 commit 31f892f

1 file changed

Lines changed: 49 additions & 18 deletions

File tree

src/save.rs

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@ use std::{
66
};
77

88
pub fn save(mut json: serde_json::Value, dir: Option<&Path>) {
9-
let mut name = if let Some(thing) = json
9+
let mut name = String::new();
10+
if let Some(thing) = json
1011
.get("blueprint")
1112
.or(json.get("blueprint_book"))
1213
.or(json.get("upgrade_planner"))
1314
.or(json.get("deconstruction_planner"))
14-
&& let Some(name) = thing.get("label")
15-
&& let Some(name) = name.as_str()
15+
&& let Some(label) = thing.get("label")
16+
&& let Some(label) = label.as_str()
1617
{
17-
name.to_owned()
18+
name = label.to_owned();
1819
} else if let Some(blueprint) = json.get("blueprint")
1920
&& let Some(icons) = blueprint.get("icons")
2021
&& let Some(icons) = icons.as_array()
2122
{
22-
let mut name = String::new();
2323
for icon in icons {
2424
if let Some(signal) = icon.get("signal")
2525
&& let Some(signal_name) = signal.get("name")
@@ -31,16 +31,9 @@ pub fn save(mut json: serde_json::Value, dir: Option<&Path>) {
3131
name.push_str(signal_name);
3232
}
3333
}
34-
if !name.is_empty() {
35-
name
36-
} else {
37-
"Untitled".to_owned()
38-
}
3934
} else if let Some(blueprint) = json.get("deconstruction_planner")
4035
&& let Some(settings) = blueprint.get("settings")
4136
{
42-
let mut name = String::new();
43-
4437
let entities = settings.get("entity_filters");
4538
let entities = entities
4639
.iter()
@@ -70,14 +63,37 @@ pub fn save(mut json: serde_json::Value, dir: Option<&Path>) {
7063
if iter.next().is_some() {
7164
name.push_str(" …");
7265
}
73-
66+
} else if let Some(blueprint) = json.get("upgrade_planner")
67+
&& let Some(settings) = blueprint.get("settings")
68+
&& let Some(mappers) = settings.get("mappers")
69+
&& let Some(mappers) = mappers.as_array()
70+
{
71+
let mut iter = mappers.iter().fuse();
72+
for mapper in (&mut iter).take(4) {
73+
if let Some(to) = mapper.get("to")
74+
&& let Some(name_part) = to.get("name")
75+
&& let Some(name_part) = name_part.as_str()
76+
{
77+
if !name.is_empty() {
78+
name.push(' ');
79+
}
80+
if let Some(typ) = to.get("type")
81+
&& let Some(typ) = typ.as_str()
82+
&& typ == "entity"
83+
{
84+
name.push_str(&format!("[entity={name_part}]"));
85+
} else {
86+
name.push_str(&name_part);
87+
}
88+
}
89+
}
7490
if !name.is_empty() {
75-
name
76-
} else {
77-
"Untitled".to_owned()
91+
name = format!("Upgrade {name}");
7892
}
79-
} else {
80-
"Untitled".to_owned()
93+
}
94+
95+
if name.is_empty() {
96+
name = "Untitled".to_owned()
8197
};
8298

8399
if let Some(index) = json.get_mut("index")
@@ -198,4 +214,19 @@ mod tests {
198214
let written_json = serde_json::Value::from_str(&written_json).unwrap();
199215
assert_eq!(written_json, json);
200216
}
217+
218+
#[test]
219+
fn test_save_upgrade_planner() {
220+
let bp = "0eNqtkdFqwzAMRf9FzwmUNmkbQ7+klKGuagjEsisroyX43ycz1sIGWx/6ZOkiXx10Z5hiL3iitzgiMwm4GRKpDtynUnuMkcTK/QxnCb5oeosEDoh10BtUwOhLr4KcYhCtjzSq6ZcJxzLhgIN4HE16Dz6ioAZbBDvIFWj4w/KMSesfvvZn4BNdwS1y9S/UZKPSS7D3xVi/nB9gzRNgKRqE2sFfBnR3fIBs86E0Sr6c4ivp+jvpCj4s2SEwuHa97JquazerdtVsljl/Ag1ntSg=";
221+
let dir = tempfile::tempdir().unwrap();
222+
let json = crate::blueprint::blueprint_to_json(bp);
223+
let json = serde_json::Value::from_str(&json).expect("should contain valid json");
224+
save(json.clone(), Some(dir.path()));
225+
let files = read_dir_unwrap(dir.path());
226+
const EXPECTED_NAME: &str = "Upgrade [entity=fast-transport-belt] [entity=fast-underground-belt] [entity=fast-splitter].json";
227+
assert_eq!(files, [EXPECTED_NAME]);
228+
let written_json = std::fs::read_to_string(dir.path().join(EXPECTED_NAME)).unwrap();
229+
let written_json = serde_json::Value::from_str(&written_json).unwrap();
230+
assert_eq!(written_json, json);
231+
}
201232
}

0 commit comments

Comments
 (0)