use crate::models::PriorityOrder;
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "todo")]
#[command(about = "A simple todo list application")]
#[command(disable_help_subcommand = true)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Add {
title: Vec<String>,
#[arg(long, value_enum)]
priority: Option<PriorityOrder>,
#[arg(long)]
due: Option<String>,
#[arg(long, num_args = 1..)]
notes: Option<Vec<String>>,
},
Show {
id: u64,
},
List {
#[arg(long)]
all: bool,
#[arg(long, conflicts_with_all = ["ongoing", "low", "medium", "high", "deleted"])]
completed: bool,
#[arg(long, conflicts_with_all = ["completed", "low", "medium", "high", "deleted"])]
ongoing: bool,
#[arg(long, conflicts_with_all = ["completed", "ongoing", "medium", "high", "deleted"])]
low: bool,
#[arg(long, conflicts_with_all = ["completed", "ongoing", "low", "high", "deleted"])]
medium: bool,
#[arg(long, conflicts_with_all = ["completed", "ongoing", "medium", "low", "deleted"])]
high: bool,
#[arg(long, conflicts_with_all = ["completed", "ongoing", "medium", "high"])]
deleted: bool,
},
Done {
id: u64,
},
Reopen {
id: u64,
},
Delete {
id: u64,
},
Restore {
id: u64,
},
Purge {
id: Option<u64>,
#[arg(long, conflicts_with_all=["id"])]
all: bool,
},
Due {
#[arg(long)]
today: bool,
#[arg(long)]
tomorrow: bool,
},
Update {
id: u64,
#[arg(long, num_args = 1..)]
title: Option<Vec<String>>,
#[arg(long)]
due: Option<String>,
#[arg(long, value_enum)]
priority: Option<PriorityOrder>,
#[arg(long, num_args = 1..)]
notes: Option<Vec<String>>,
},
Search {
search_string: Vec<String>,
},
#[command(hide = true)]
Seed {
#[arg(long)]
reset: bool,
},
Stats {},
Help {},
Clear {},
#[command(alias = "quit")]
Exit {},
}