done.rs

 1use anyhow::Result;
 2use std::path::Path;
 3
 4use crate::db;
 5use crate::ops;
 6
 7pub fn run(root: &Path, ids: &[String], json: bool) -> Result<()> {
 8    let store = db::open(root)?;
 9
10    let mut closed = Vec::new();
11    for raw in ids {
12        let id = db::resolve_task_id(&store, raw, false)?;
13        ops::mark_done(&store, &id)?;
14        closed.push(id);
15    }
16
17    if json {
18        let out: Vec<_> = closed
19            .iter()
20            .map(|id| serde_json::json!({"id": id, "status": "closed"}))
21            .collect();
22        println!("{}", serde_json::to_string(&out)?);
23    } else {
24        let c = crate::color::stdout_theme();
25        for id in &closed {
26            println!("{}closed{} {id}", c.green, c.reset);
27        }
28    }
29
30    Ok(())
31}