use arguments as args;
use clap::{Parser, Subcommand};
pub mod arguments {
use clap::Args;
use super::subcommands as sub;
use crate::models::Priority;
#[derive(Args, Debug)]
pub struct Docs {
#[command(subcommand)]
pub subcommand: sub::Docs,
}
#[derive(Args, Debug)]
pub struct Flag {
#[command(subcommand)]
pub subcommand: sub::Flag,
}
#[derive(Args, Debug)]
pub struct Persister {
#[arg(long, short)]
pub persister: Option<String>,
}
#[derive(Args, Debug)]
pub struct Add {
#[arg(long, short)]
pub persister: Option<String>,
#[arg(value_enum)]
pub priority: Priority,
pub content: String,
}
#[derive(Args, Debug)]
pub struct Edit {
#[arg(long, short)]
pub persister: Option<String>,
#[arg(value_delimiter = ',', required = true)]
pub ids: Vec<u32>,
}
#[derive(Args, Debug)]
pub struct Set {
#[arg(long, short)]
pub persister: Option<String>,
#[command(subcommand)]
pub subcommand: sub::Set,
}
#[derive(Args, Debug)]
pub struct SetPriority {
#[arg(value_delimiter = ',', required = true)]
pub ids: Vec<u32>,
#[arg(value_enum)]
pub priority: Priority,
}
#[derive(Args, Debug)]
pub struct SetContent {
#[arg(value_delimiter = ',', required = true)]
pub ids: Vec<u32>,
pub content: String,
}
#[derive(Args, Debug)]
pub struct Copy {
pub left: String,
pub right: String,
}
#[derive(Args, Debug)]
pub struct Config {
#[command(subcommand)]
pub subcommand: sub::Config,
}
#[derive(Args, Clone, Debug, PartialEq, Eq)]
pub struct ConfigSet {
#[arg(long, value_name = "STRING")]
pub persister: Option<String>,
#[arg(long, value_name = "BOOL")]
pub force_drop: Option<bool>,
#[arg(long, value_name = "BOOL")]
pub force_copy: Option<bool>,
#[arg(long, value_name = "BOOL")]
pub drop_after_copy: Option<bool>,
}
}
pub mod subcommands {
use clap::Subcommand;
use super::arguments as args;
#[derive(Subcommand, Debug)]
pub enum Set {
Content(args::SetContent),
Priority(args::SetPriority),
}
#[derive(Subcommand, Debug)]
pub enum Config {
Env,
Path,
Init,
#[command(alias = "ls")]
List,
#[command(alias = "s")]
Set(args::ConfigSet),
#[command(alias = "rm")]
Remove,
}
#[derive(Subcommand, Debug)]
pub enum Flag {
Persister,
}
#[derive(Subcommand, Debug)]
pub enum Docs {
Config,
View,
Add,
Set,
Check,
Uncheck,
Drop,
Copy,
Clean,
Remove,
Sample,
}
}
#[derive(Subcommand, Debug)]
pub enum Command {
#[command(alias = "conf")]
Config(args::Config),
#[command(alias = "v")]
View(args::Persister),
#[command(alias = "a")]
Add(args::Add),
#[command(alias = "s")]
Set(args::Set),
#[command(alias = "c")]
Check(args::Edit),
#[command(alias = "uc")]
Uncheck(args::Edit),
#[command(alias = "d")]
Drop(args::Edit),
#[command(alias = "cp")]
Copy(args::Copy),
#[command(alias = "cl")]
Clean(args::Persister),
#[command(alias = "rm")]
Remove(args::Persister),
#[command(alias = "sa")]
Sample(args::Persister),
#[command(alias = "man")]
Docs(args::Docs),
#[command(alias = "f")]
Flag(args::Flag),
}
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None, next_line_help = false)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}