2021-12-09 01:25:48 +00:00
|
|
|
// Note: this requires the `derive` feature
|
2021-12-08 22:46:49 +00:00
|
|
|
|
2021-11-30 18:30:19 +00:00
|
|
|
use std::ffi::OsString;
|
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
use clap::{AppSettings, Parser, Subcommand};
|
|
|
|
|
|
|
|
/// A fictional versioning CLI
|
|
|
|
#[derive(Parser)]
|
|
|
|
#[clap(name = "git")]
|
2022-01-11 00:47:20 +00:00
|
|
|
#[clap(about = "A fictional versioning CLI", long_about = None)]
|
2021-11-30 18:30:19 +00:00
|
|
|
struct Cli {
|
|
|
|
#[clap(subcommand)]
|
|
|
|
command: Commands,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Subcommand)]
|
|
|
|
enum Commands {
|
|
|
|
/// Clones repos
|
|
|
|
#[clap(setting(AppSettings::ArgRequiredElseHelp))]
|
|
|
|
Clone {
|
|
|
|
/// The remote to clone
|
|
|
|
remote: String,
|
|
|
|
},
|
|
|
|
/// pushes things
|
|
|
|
#[clap(setting(AppSettings::ArgRequiredElseHelp))]
|
|
|
|
Push {
|
|
|
|
/// The remote to target
|
|
|
|
remote: String,
|
|
|
|
},
|
|
|
|
/// adds things
|
|
|
|
#[clap(setting(AppSettings::ArgRequiredElseHelp))]
|
|
|
|
Add {
|
|
|
|
/// Stuff to add
|
2021-12-01 20:30:51 +00:00
|
|
|
#[clap(required = true, parse(from_os_str))]
|
2021-11-30 18:30:19 +00:00
|
|
|
path: Vec<PathBuf>,
|
|
|
|
},
|
|
|
|
#[clap(external_subcommand)]
|
|
|
|
External(Vec<OsString>),
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let args = Cli::parse();
|
|
|
|
|
|
|
|
match &args.command {
|
|
|
|
Commands::Clone { remote } => {
|
|
|
|
println!("Cloning {}", remote);
|
|
|
|
}
|
|
|
|
Commands::Push { remote } => {
|
|
|
|
println!("Pushing to {}", remote);
|
|
|
|
}
|
|
|
|
Commands::Add { path } => {
|
|
|
|
println!("Adding {:?}", path);
|
|
|
|
}
|
|
|
|
Commands::External(args) => {
|
|
|
|
println!("Calling out to {:?} with {:?}", &args[0], &args[1..]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Continued program logic goes here...
|
|
|
|
}
|