#[macro_export] macro_rules! special_flag { ($args:expr, $($flag:expr),+) => {{ let mut found = false; $( let flag = $flag; if $args.iter().any(|arg| arg == flag) { found = true; } $args.retain(|arg| arg != flag); )+ found }}; } #[macro_export] macro_rules! special_argument { ($args:expr, $($flag:expr),+) => {{ let mut value: Option = None; let mut found = false; $( let flag = $flag; if !found { let mut i = 0; while i < $args.len() { if $args[i] == flag { if i + 1 < $args.len() { value = Some($args[i + 1].clone()); $args.remove(i + 1); $args.remove(i); } else { value = None; $args.remove(i); } #[allow(unused_assignments)] { found = true; } break; } i += 1; } } )+ value }}; }