use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "ct",
version = "0.1.0",
about = "Code to Diagram/Documentation Generator",
long_about = "CodeTwin (ct) - Unidirectional code to diagram generator\nhttps://github.com/carlosferreyra/codetwin\n\nHelp developers visually understand repository structure and design patterns."
)]
pub struct Cli {
#[arg(short, long, global = true)]
pub verbose: bool,
#[arg(short, long, global = true)]
pub quiet: bool,
#[arg(short = 'C', long, value_name = "DIR", global = true)]
pub cwd: Option<String>,
#[arg(long, global = true)]
pub json: bool,
#[command(subcommand)]
pub command: Option<Commands>,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Gen {
#[arg(long, value_name = "PATH")]
output: Option<String>,
#[arg(long, value_name = "LAYOUT")]
layout: Option<String>,
#[arg(long, value_name = "DIR")]
source: Option<Vec<String>>,
#[arg(long, value_name = "PATTERN")]
exclude: Option<Vec<String>>,
#[arg(long, value_name = "FILE")]
custom_layout: Option<String>,
#[arg(long)]
save: bool,
},
Watch {
#[arg(long, value_name = "PATH")]
output: Option<String>,
#[arg(long, value_name = "LAYOUT")]
layout: Option<String>,
#[arg(long, value_name = "DIR")]
source: Option<Vec<String>>,
#[arg(long, value_name = "MS", default_value = "300")]
debounce: u64,
#[arg(long, value_name = "PATTERN")]
exclude: Option<Vec<String>>,
},
Init {
#[arg(long)]
force: bool,
},
List,
}