done.rs

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