stats.rs

 1use anyhow::Result;
 2use std::path::Path;
 3
 4use crate::db;
 5
 6pub fn run(root: &Path) -> Result<()> {
 7    let store = db::open(root)?;
 8    let tasks = store.list_tasks()?;
 9
10    let total = tasks.len();
11    let open = tasks
12        .iter()
13        .filter(|t| t.status == db::Status::Open)
14        .count();
15    let in_progress = tasks
16        .iter()
17        .filter(|t| t.status == db::Status::InProgress)
18        .count();
19    let closed = tasks
20        .iter()
21        .filter(|t| t.status == db::Status::Closed)
22        .count();
23
24    println!(
25        "{}",
26        serde_json::json!({
27            "total": total,
28            "open": open,
29            "in_progress": in_progress,
30            "closed": closed,
31        })
32    );
33
34    Ok(())
35}