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}