22 lines
719 B
Rust
22 lines
719 B
Rust
use crate::prelude::*;
|
|
|
|
|
|
pub fn read_items (contents: &str, map: &mut HashMap<String, Item>) -> usize {
|
|
let Ok(json): std::result::Result<Value, _> = serde_json::from_str(&contents) else { error!("Can't read Value from contents"); return 0 };
|
|
let Value::Array(list) = json else { error!("Value isn't Array, skipping"); return 0 };
|
|
|
|
let start = map.len();
|
|
|
|
for t in list.into_iter().map(Item::from_json).flatten() {
|
|
if map.contains_key(&t.name) {
|
|
let entry = map.get_mut(&t.name).unwrap();
|
|
entry.weight = entry.weight.or(t.weight);
|
|
entry.rest.extend(t.rest);
|
|
} else {
|
|
map.insert(t.name.clone(), t);
|
|
}
|
|
}
|
|
|
|
map.len() - start
|
|
}
|