stats.rs

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