summaryrefslogtreecommitdiff
path: root/src/flags.rs
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-11-19 17:37:56 +0000
committertylermurphy534 <tylermurphy534@gmail.com>2022-11-19 17:37:56 +0000
commitce6af95b74106d65c3d12f745d215732076562b9 (patch)
tree6f6c2ef19b93c80b9cc4567a4a94ce3621ff8eb4 /src/flags.rs
parentupdate aur depends (diff)
parentfix install file part 2 (diff)
downloadcrab-ce6af95b74106d65c3d12f745d215732076562b9.tar.gz
crab-ce6af95b74106d65c3d12f745d215732076562b9.tar.bz2
crab-ce6af95b74106d65c3d12f745d215732076562b9.zip
Merge pull request '0.6.0' (#1) from dev into main
Reviewed-on: https://g.tylerm.dev/tylermurphy534/crab/pulls/1
Diffstat (limited to 'src/flags.rs')
-rw-r--r--src/flags.rs120
1 files changed, 73 insertions, 47 deletions
diff --git a/src/flags.rs b/src/flags.rs
index 9432b8f..a945483 100644
--- a/src/flags.rs
+++ b/src/flags.rs
@@ -1,66 +1,92 @@
+
+const HELP_FLAG: &str = "help h";
+const VERSION_FLAG: &str = "version v";
+const DONT_PERSIST: &str = "d";
+
+
pub struct Flags {
- pub help: bool,
- pub version: bool,
- pub dont_persist: bool,
- pub arg_count: usize
+ pub help: bool,
+ pub version: bool,
+ pub dont_persist: bool,
+ pub arg_count: usize
}
+
+/// Parses an list of String arguments into a set of flags that can be used by crab
+/// #### Arguments
+/// * `args` - The list of String arguments
+/// #### Returns
+/// * `None` - If there is an invalid argument in the list
+/// * `Some(Flags)` - If the arguments were secussfully parsed, returning the flags
pub fn parse(args: &[String]) -> Option<Flags> {
- let mut flags = Flags {
- help: false,
- version: false,
- dont_persist: false,
- arg_count: 0
- };
- for arg in args {
- if !is_arg(&arg) { break; }
- flags.arg_count += 1;
- if arg.starts_with("--") {
- let flag = &arg[2..];
- if !set_flag(&flag, &mut flags) {
- eprintln!("Invalid argument: {}", arg);
- return None
- }
- } else {
- let flag = &arg[1..];
- for char in flag.chars() {
- if !set_flag(&char.to_string(), &mut flags) {
- eprintln!("Invalid argument: {}", arg);
- return None
+ let mut flags = Flags {
+ help: false,
+ version: false,
+ dont_persist: false,
+ arg_count: 0
+ };
+ for arg in args {
+ if !is_arg(&arg) { break; }
+ flags.arg_count += 1;
+ if arg.starts_with("--") {
+ let flag = &arg[2..];
+ if !set_flag(&flag, &mut flags) {
+ eprintln!("Invalid argument: {}", arg);
+ return None
+ }
+ } else {
+ let flag = &arg[1..];
+ for char in flag.chars() {
+ if !set_flag(&char.to_string(), &mut flags) {
+ eprintln!("Invalid argument: {}", arg);
+ return None
+ }
+ }
}
- }
}
- }
- Some(flags)
+ Some(flags)
}
+
+/// Checks if a given string is a given argument
fn is_arg(arg: &str) -> bool {
return arg.starts_with("-");
}
-const HELP_FLAG: &str = "help h";
-const VERSION_FLAG: &str = "version v";
-const DONT_PERSIST: &str = "d";
+/// Sets a flag in a `Flags` struct
+/// #### Arguments
+/// * `arg` - The argument to check
+/// * `flags` - The `Flags` stuct to update
+/// #### Returns
+/// * `true` - If the argument passed is a valid flag
+/// * `false` - If the argument passed is not a valid flag
fn set_flag(arg: &str, flags: &mut Flags) -> bool {
- if has_flag_set(&arg, HELP_FLAG) {
- flags.help = true;
- return true
- } else if has_flag_set(&arg, VERSION_FLAG) {
- flags.version = true;
- return true
- } else if has_flag_set(&arg, DONT_PERSIST) {
- flags.dont_persist = true;
- return true
- }
- false
+ if has_flag_set(&arg, HELP_FLAG) {
+ flags.help = true;
+ return true
+ } else if has_flag_set(&arg, VERSION_FLAG) {
+ flags.version = true;
+ return true
+ } else if has_flag_set(&arg, DONT_PERSIST) {
+ flags.dont_persist = true;
+ return true
+ }
+ false
}
+
+/// Returns if a given argument is a certain flag
+/// #### Arguments
+/// * `arg` - The arch to check
+/// #### Returns
+/// * `true` - If the argument matches the flag
+/// * `false` - If the argument doesn't match the flag
fn has_flag_set(arg: &str, check: &str) -> bool {
- for check_arg in check.split(" ") {
- if check_arg == arg {
- return true
+ for check_arg in check.split(" ") {
+ if check_arg == arg {
+ return true
+ }
}
- }
- return false
+ return false
}