1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use crate::data::{get_version_specific_file, FOODS_FILE};
use crate::models::food::Food;
use crate::models::version::Version;
use crate::DataResult;
use std::collections::HashMap;
use std::iter::FromIterator;
use std::sync::Arc;
pub struct Foods {
version: Arc<Version>,
}
impl Foods {
pub fn new(version: Arc<Version>) -> Self {
Self { version }
}
pub fn foods_array(&self) -> DataResult<Vec<Food>> {
let content = get_version_specific_file(&self.version, FOODS_FILE)?;
let foods = serde_json::from_str(&content)?;
Ok(foods)
}
pub fn foods(&self) -> DataResult<HashMap<u32, Food>> {
let foods = self.foods_array()?;
let food_map = HashMap::from_iter(foods.into_iter().map(|f| (f.id, f)));
Ok(food_map)
}
pub fn foods_by_name(&self) -> DataResult<HashMap<String, Food>> {
let foods = self.foods_array()?;
let food_map = HashMap::from_iter(foods.into_iter().map(|f| (f.name.clone(), f)));
Ok(food_map)
}
}