Skip to main content

sift_queue/cli/commands/
rm.rs

1use crate::cli::help::{HelpDoc, HelpSection};
2use crate::queue::Queue;
3use crate::RmArgs;
4use anyhow::Result;
5use clap::builder::{StyledStr, Styles};
6use std::path::PathBuf;
7
8pub fn after_help(styles: &Styles) -> StyledStr {
9    HelpDoc::new()
10        .section(
11            HelpSection::new("Behavior:")
12                .item("sq rm <id>", "Remove an item from the task file entirely")
13                .item(
14                    "sq rm <id> --json",
15                    "Return the removed item payload as JSON",
16                ),
17        )
18        .section(
19            HelpSection::new("Safety:")
20                .text("Prefer sq close when you want to preserve history or keep completed work visible.")
21                .text("Use sq rm when an item was created by mistake or should be deleted entirely."),
22        )
23        .section(
24            HelpSection::new("Examples:")
25                .item("sq rm abc", "Delete a mistaken task")
26                .item(
27                    "sq rm abc --json",
28                    "Delete an item and emit the removed record for downstream tooling",
29                ),
30        )
31        .render(styles)
32}
33
34/// Execute the `sq rm` command.
35pub fn execute(args: &RmArgs, queue_path: PathBuf) -> Result<i32> {
36    let queue = Queue::new(queue_path);
37
38    let id = match &args.id {
39        Some(ref id) => id.as_str(),
40        None => {
41            eprintln!("Error: Item ID is required");
42            return Ok(1);
43        }
44    };
45
46    match queue.remove(id)? {
47        Some(removed) => {
48            if args.json {
49                let json = serde_json::to_string_pretty(&removed.to_json_value())?;
50                println!("{}", json);
51            } else {
52                println!("{}", removed.id);
53                eprintln!("Removed item {}", removed.id);
54            }
55            Ok(0)
56        }
57        None => {
58            eprintln!("Error: Item not found: {}", id);
59            Ok(1)
60        }
61    }
62}