pub struct Args { pub ip: String, pub port: u16, pub unsafe_mode: bool, } pub fn parse_args() -> Args { let args: Vec = std::env::args().collect(); let mut ip = "127.0.0.1".to_string(); let mut port = 11525; let mut unsafe_mode = false; let mut i = 1; while i < args.len() { if args[i] == "-p" { if i + 1 < args.len() { port = args[i + 1].parse::().unwrap_or_else(|_| { eprintln!("Invalid port number: {}", args[i + 1]); std::process::exit(1); }); i += 2; } else { eprintln!("-p requires a port number"); std::process::exit(1); } } else if args[i] == "-i" { if i + 1 < args.len() { ip = args[i + 1].clone(); if ip != "127.0.0.1" && ip != "0.0.0.0" { eprintln!("Invalid IP address: {}. Must be 127.0.0.1 or 0.0.0.0", ip); std::process::exit(1); } i += 2; } else { eprintln!("-i requires an IP address"); std::process::exit(1); } } else if args[i] == "--unsafe" { unsafe_mode = true; i += 1; } else { eprintln!("Unknown argument: {}", args[i]); std::process::exit(1); } } Args { ip, port, unsafe_mode, } }