use crate::models::recipe::{Recipe, Recipe01}; impl Recipe { /// The function `list_menu_product_code` returns a vector of product codes from a list of recipes. /// /// Returns: /// /// a vector of string references (`&str`) representing the product codes of the recipes in /// `Recipe01`. pub fn list_menu_product_code(&self) -> Vec<&str> { self.Recipe01 .iter() .map(|r| r.productCode.as_str()) .collect() } /// The function `list_material_settings` returns a vector of strings containing the IDs of material /// settings. /// /// Returns: /// /// The function `list_material_settings` returns a `Vec` which contains the IDs of the material /// settings. pub fn list_material_settings(&self) -> Vec { self.MaterialSetting .iter() .map(|r| r.id.to_string()) .collect() } pub fn list_topping_list(&self) -> Vec { self.Topping .ToppingList .iter() .map(|r| r.id.clone().to_string()) .collect() } pub fn list_topping_group(&self) -> Vec { self.Topping .ToppingGroup .iter() .map(|r| r.groupID.clone().to_string()) .collect() } #[cfg(feature = "diff")] pub fn list_diff_pd_between_recipes(&self, another_recipe: &Recipe) -> Vec { let mut list = Vec::new(); self.Recipe01.iter().for_each(|r| { if !another_recipe.diff_pd_between_recipes(another_recipe, r.productCode.clone()) { list.push(r.productCode.clone()); } }); list } pub fn list_diff_pd_ignore_country_code(&self, another_recipe: &Recipe) -> Vec { let mut list = Vec::new(); self.Recipe01.iter().for_each(|r| { // clean before search let rpl = r.clone(); // grep only recipe without country code let pd = rpl.productCode; let pd_split = pd.split("-").collect::>(); // combine without first elem let mut new_pd = String::new(); for (i, ele) in pd_split.iter().enumerate() { if i != 0 { new_pd.push_str(ele); if i != pd_split.len() - 1 { new_pd.push('-'); } } } if !another_recipe .diff_pd_between_recipes_ignore_country(another_recipe, new_pd.clone()) { list.push(new_pd.clone()); } }); list } pub fn find_recipe_by_material_path_id(&self, material_path_id: &str) -> Vec<&Recipe01> { // let mut res = Vec::new(); let total: Vec<&Recipe01> = self .Recipe01 .iter() .filter(|r| { for ele in r.recipes.clone() { if ele.materialPathId.as_i64().unwrap() == material_path_id.parse::().unwrap() { // res.push(r.clone()); return true; } } return false; }) .collect(); total } } impl Recipe01 { pub fn list_recipe_only_id(&self) -> Vec { self.recipes .iter() .map(|rpl| rpl.materialPathId.clone().to_string()) .collect() } }