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}