diff --git a/Cargo.toml b/Cargo.toml index 9cfae8c..7eda251 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,6 @@ edition = "2021" [dependencies] Fasching = "0.1.19" +clap = { version = "4.5.4", features = ["derive"] } #Fasching = {path = "../Fasching/"} whoami = "1.5.1" diff --git a/src/main.rs b/src/main.rs index 41fd2be..27b514a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,35 +1,43 @@ pub mod comparemode; pub mod createmode; pub mod syscompare; +mod options; use crate::syscompare::SysCompareApp; use crate::syscompare::SysCompareMode::{Compare, Create}; use std::env::args; use std::process::exit; +use clap::{FromArgMatches, Parser}; +use crate::options::{Arguments, Commands}; fn main() { + let options = Arguments::parse(); + let args: Vec = args().collect(); // println!("{:#?}", args); // testing - let app = match args.get(1) { + let app = match options.command { None => { print_help(); exit(0); } - Some(mode) => { + Some(Commands::Create { root_dir, output_path }) => { // app mode - let m = mode.as_str(); - let app_mode = match m { - "create" => Create, - "compare" => Compare, - _ => { - println!("Invalid MODE argument"); - print_help(); - exit(0); - } - }; - SysCompareApp::new(app_mode, args) + // let app_mode = match m { + // "create" => Create, + // "compare" => Compare, + // _ => { + // println!("Invalid MODE argument"); + // print_help(); + // exit(0); + // } + // }; + + SysCompareApp::new(Create, args) + }, + Some(Commands::Compare { left, right }) => { + SysCompareApp::new(Compare, args) } }; diff --git a/src/options.rs b/src/options.rs new file mode 100644 index 0000000..42d3a88 --- /dev/null +++ b/src/options.rs @@ -0,0 +1,27 @@ +use clap::{Command, Parser, Subcommand}; +use crate::syscompare::SysCompareMode; + +#[derive(Parser)] +pub struct Arguments { + #[command(subcommand)] + pub command: Option, + pub input_path: Option, + pub output_path: Option, + pub show: Option, +} + +#[derive(Subcommand)] +pub enum Commands { + Create { + #[arg(short, long)] + root_dir: String, + #[arg(short, long)] + output_path: String, + }, + Compare { + #[arg(short, long)] + left: String, + #[arg(short, long)] + right: String, + }, +}