From 28c011c7b3ebd8f5aae111551222ed3748937b33 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Tue, 3 Jun 2025 21:49:25 +0200 Subject: Initial commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Basic commands have been added, but most of the features for this project are still work in progress. Signed-off-by: Miquel Sabaté Solà --- crates/cli/src/main.rs | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 crates/cli/src/main.rs (limited to 'crates/cli/src/main.rs') diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs new file mode 100644 index 0000000..78d094d --- /dev/null +++ b/crates/cli/src/main.rs @@ -0,0 +1,81 @@ +mod init; +mod nuke; +mod run; +mod words; + +/// Version for this program. +const VERSION: &str = "0.1.0"; + +fn help() { + println!("Self-assessment tool for language learning.\n"); + println!("usage: mihi [OPTIONS] [COMMAND] [COMMAND OPTIONS]\n"); + + println!("Options:"); + println!(" -h, --help\t\tPrint this message."); + println!(" -v, --version\tPrint the version of this program.\n"); + + println!("Commands:"); + println!(" init\t\t\tInitialize the configuration for this application."); + println!(" nuke\t\t\tRemove all files from this application and its database."); + println!(" run\t\t\tRun exercises. Default command if none was given."); + println!(" words\t\tManage the words for this application."); +} + +fn main() { + let mut args = std::env::args(); + let nargs = std::env::args().count(); + let mut count = 1; + + // Skip command name. + args.next(); + + // And iterate over the arguments. + while let Some(arg) = args.next() { + count += 1; + + match arg.as_str() { + "-h" | "--help" => { + if nargs > count { + println!( + "warning: arguments passed the '{}' flag will be ignored.", + arg.as_str() + ); + } + help(); + std::process::exit(0); + } + "-v" | "--version" => { + if nargs > count { + println!( + "warning: arguments passed the '{}' flag will be ignored.", + arg.as_str() + ); + } + println!("mihi {}", VERSION); + std::process::exit(0); + } + "init" => { + let rest: Vec = args.collect(); + return init::run(rest); + } + "nuke" => { + let rest: Vec = args.collect(); + return nuke::run(rest); + } + "words" => { + let rest: Vec = args.collect(); + return words::run(rest); + } + "run" => { + let rest: Vec = args.collect(); + return run::run(rest); + } + _ => { + println!("error: unknown flag or command: '{}'", arg.as_str()); + std::process::exit(1); + } + } + } + + run::run(Vec::new()); +} -- cgit v1.2.3