use clap::Parser;
mod cmd_add;
mod cmd_check;
mod cmd_doctor;
mod cmd_init;
mod cmd_lock;
mod cmd_publish;
mod cmd_remove;
mod cmd_search;
mod cmd_suggest;
mod cmd_update;
mod cmd_vendor;
#[derive(Parser)]
#[command(name = "light", version, about = "Менеджер компонентов Light")]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(clap::Subcommand)]
enum Command {
Init(cmd_init::InitArgs),
Check(cmd_check::CheckArgs),
Suggest(cmd_suggest::SuggestArgs),
Search(cmd_search::SearchArgs),
Doctor(cmd_doctor::DoctorArgs),
Add(cmd_add::AddArgs),
Remove(cmd_remove::RemoveArgs),
Lock(cmd_lock::LockArgs),
Update(cmd_update::UpdateArgs),
Vendor(cmd_vendor::VendorArgs),
Publish(cmd_publish::PublishArgs),
}
#[derive(Clone, Copy, clap::ValueEnum)]
enum OutputFormat {
Text,
Json,
}
fn main() {
let cli = Cli::parse();
let result = match cli.command {
Command::Init(args) => cmd_init::run(args),
Command::Check(args) => cmd_check::run(args),
Command::Suggest(args) => cmd_suggest::run(args),
Command::Search(args) => cmd_search::run(args),
Command::Doctor(args) => cmd_doctor::run(args),
Command::Add(args) => cmd_add::run(args),
Command::Remove(args) => cmd_remove::run(args),
Command::Lock(args) => cmd_lock::run(args),
Command::Update(args) => cmd_update::run(args),
Command::Vendor(args) => cmd_vendor::run(args),
Command::Publish(args) => cmd_publish::run(args),
};
match result {
Ok(code) => std::process::exit(code),
Err(error) => {
eprintln!("{error}");
std::process::exit(1);
}
}
}