1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
/// Check if argv has a specific flag /// Correctly stops looking after an -- argument terminator. /// ## Usage /// command input /// ```bash /// ls -f --unicorn --foo=bar -- --rainbow /// ``` /// /// ```edition2018 /// use has_flag::has_flag; /// use env::args; /// /// has_flag("unicorn", args().collect()); /// //=> true /// /// has_flag ("--unicorn", args().collect()); /// //=> true /// /// has_flag("f", args().collect()); /// //=> true /// /// has_flag("-f", args().collect()); /// //=> true /// /// has_flag("foo=bar", env::args().collect()); /// //=> true /// /// has_flag("foo", env::args().collect()); /// //=> false /// /// has_flag("rainbow", env::args().collect()); /// //=> false /// ``` pub fn has_flag(flag: &str, args: Vec<String>) -> bool { let prefix = if flag.starts_with("-") { "" } else { if flag.len() == 1 { "-" } else { "--" } }; let args = &args; let position = args .into_iter() .position(|x| x == &format!("{}{}", prefix, flag)); let terminator_position = args.into_iter().position(|x| "--" == x); match position { Some(p) => match terminator_position { Some(tp) => p < tp, None => true, }, _ => false, } }