phab_lib/metric/
status.rs

1use std::collections::HashSet;
2
3use crate::dto::Task;
4
5pub struct StatusMetric;
6
7impl StatusMetric {
8  /// ```
9  /// use std::collections::HashSet;
10  /// use fake::Faker;
11  /// use fake::Fake;
12  /// use fake::Dummy;
13  /// use phab_lib::dto::Task;
14  /// use phab_lib::metric::status::StatusMetric;
15  ///
16  /// let mut done_statuses = HashSet::new();
17  /// done_statuses.insert("done".to_owned());
18  /// done_statuses.insert("foo".to_owned());
19  ///
20  /// let mut task_1: Task = Faker.fake();
21  /// task_1.status = "done".to_owned();
22  ///
23  /// let mut task_2: Task = Faker.fake();
24  /// task_2.status = "done".to_owned();
25  ///
26  /// let tasks: Vec<Task> = vec![
27  ///   task_1,
28  ///   task_2,
29  ///   Faker.fake(),
30  /// ];
31  ///
32  /// assert_eq!(StatusMetric::count_done_tasks(vec![], &done_statuses), 0);
33  /// assert_eq!(StatusMetric::count_done_tasks(tasks, &done_statuses), 2);
34  /// ```
35  pub fn count_done_tasks(tasks: Vec<Task>, done_statuses: &HashSet<String>) -> usize {
36    return tasks
37      .iter()
38      .filter(|task| done_statuses.contains(&task.status))
39      .count();
40  }
41}