what do yall think of this?
use std::path::PathBuf;
use std::process::exit as rexit;
pub fn main() {
let mut args = std::env::args().peekable();
if let Some(path) = args.peek() {
if PathBuf::from(path).exists() {
let _ = args.next();
}
}
while let Some(mut arg) = args.next() {
match (arg.chars().nth(0), arg.chars().nth(1)) {
(Some('-'), Some('-')) => {
let _ = arg.remove(0);
let _ = arg.remove(0);
match arg.as_str() {
"help" => {
print_help();
if args.peek() == Some(&String::from("more_help")) {
print_more_help();
}
rexit(0);
}
arg => {
eprintln!("Invalid long argument: {arg}");
rexit(1);
}
}
}
(Some('-'), Some(_)) => {
let _ = arg.remove(0);
for char in arg.chars() {
match char {
'h' => {
print_help();
if args.peek() == Some(&String::from("more_help")) {
print_more_help();
}
rexit(0);
}
arg => {
eprintln!("Invalid short argument: {arg}");
rexit(1);
}
}
}
}
_ => {
// handle anything not consumed by a flag
eprintln!("Invalid argument: {arg}");
rexit(1);
}
}
}
}