use crate::models::Machine;
use std::collections::HashMap;
pub fn get_manufacturers_list(machines: &HashMap<String, Machine>) -> HashMap<String, usize> {
let mut manufacturers: HashMap<String, usize> = HashMap::new();
machines
.values()
.filter_map(|machine| machine.extended_data.as_ref()?.manufacturer.as_ref()) .for_each(|manufacturer| add_item_to_list(&mut manufacturers, manufacturer.clone()));
manufacturers
}
pub fn get_languages_list(machines: &HashMap<String, Machine>) -> HashMap<String, usize> {
let mut languages: HashMap<String, usize> = HashMap::new();
machines
.values()
.flat_map(|machine| machine.languages.iter()) .for_each(|language| add_item_to_list(&mut languages, language.clone()));
languages
}
pub fn get_players_list(machines: &HashMap<String, Machine>) -> HashMap<String, usize> {
let mut players: HashMap<String, usize> = HashMap::new();
machines
.values()
.filter_map(|machine| machine.extended_data.as_ref()?.players.as_ref()) .flat_map(|players| players.split(',').map(|s| s.trim().to_string())) .for_each(|player| add_item_to_list(&mut players, player));
players
}
pub fn get_series_list(machines: &HashMap<String, Machine>) -> HashMap<String, usize> {
let mut series: HashMap<String, usize> = HashMap::new();
machines.values().for_each(|machine| {
if let Some(series_name) = &machine.series {
add_item_to_list(&mut series, series_name.clone());
}
});
series
}
pub fn get_categories_list(machines: &HashMap<String, Machine>) -> HashMap<String, usize> {
let mut categories: HashMap<String, usize> = HashMap::new();
machines.values().for_each(|machine| {
if let Some(category) = &machine.category {
add_item_to_list(&mut categories, category.clone());
}
});
categories
}
pub fn get_subcategories_list(machines: &HashMap<String, Machine>) -> HashMap<String, usize> {
let mut subcategories: HashMap<String, usize> = HashMap::new();
machines.values().for_each(|machine| {
if let Some(category) = &machine.category {
if let Some(subcategory) = &machine.subcategory {
let key = format!("{} - {}", category, subcategory);
add_item_to_list(&mut subcategories, key);
}
}
});
subcategories
}
fn add_item_to_list(map: &mut HashMap<String, usize>, name: String) {
let counter = map.entry(name).or_insert(0);
*counter += 1;
}