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}