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 reopened = Vec::new();
11 for raw in ids {
12 let id = db::resolve_task_id(&store, raw, false)?;
13 ops::reopen_task(&store, &id)?;
14 reopened.push(id);
15 }
16
17 if json {
18 let out: Vec<_> = reopened
19 .iter()
20 .map(|id| serde_json::json!({"id": id, "status": "open"}))
21 .collect();
22 println!("{}", serde_json::to_string(&out)?);
23 } else {
24 let c = crate::color::stdout_theme();
25 for id in &reopened {
26 println!("{}reopened{} {id}", c.green, c.reset);
27 }
28 }
29
30 Ok(())
31}