pub fn find_by_id_or( arr: &[(Id, Option)], id: Id, default: Val, ) -> Val { arr.iter() .find(|(elem_id, _)| *elem_id == id) .map_or(default, |row| match row { (_, Some(quantity)) => *quantity, (_, _) => default, }) } #[cfg(test)] mod test { use super::find_by_id_or; #[test] fn when_no_elements_then_return_default() { let arr = []; let result = find_by_id_or(&arr, 1, 42); assert_eq!(result, 42); } #[test] fn when_id_not_in_elements_then_return_default() { let arr = [(0, Some(100)), (2, Some(200))]; let result = find_by_id_or(&arr, 1, 42); assert_eq!(result, 42); } #[test] fn when_value_is_none_then_return_default() { let arr = [(1, None)]; let result = find_by_id_or(&arr, 1, 42); assert_eq!(result, 42); } #[test] fn when_value_is_some_then_return_value() { let arr = [(1, Some(67))]; let result = find_by_id_or(&arr, 1, 42); assert_eq!(result, 67); } }