use crate::config::{LanguageStandard, ProjectType};
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "Smidr", version = "1.1.0", long_about = "Smidr is a cargo-inspired build tool for C/C++ projects, meant to bridge dependencies across different build systems into a single build.", author = "Max-Mend")]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
#[command(alias = "n")]
New {
name: String,
#[arg(long, value_enum, conflicts_with = "lib")]
r#type: Option<ProjectType>,
#[arg(long)]
lib: bool,
#[arg(long)]
std: Option<LanguageStandard>,
},
#[command(alias = "b")]
Build {
#[arg(long)]
release: bool,
#[arg(long)]
verbose: bool,
#[arg(long)]
dry_run: bool,
},
#[command(alias = "r")]
Run {
#[arg(long)]
release: bool,
#[arg(long)]
verbose: bool,
#[arg(long)]
dry_run: bool,
},
#[command(alias = "cl")]
Clean,
#[command(alias = "rb")]
Rebuild {
#[arg(long)]
release: bool,
#[arg(long)]
verbose: bool,
#[arg(long)]
dry_run: bool,
},
#[command(alias = "fmt")]
Format,
#[command(alias = "a")]
Add { name: String },
#[command(alias = "rm")]
Remove { name: String },
#[command(alias = "l")]
Lint,
#[command(alias = "up")]
Update,
}
pub fn parse_args() -> Cli {
Cli::parse()
}