use std::env; fn help() { println!( "Usage: sclient [--servername ] [-k | --insecure] [ssh|rsync] ex: sclient whatever.com 3000 (whatever.com:443 localhost:3000) ex: sclient whatever.com:4080 0.0.0.0:3000" ); } fn main() { let args: Vec = env::args().collect(); if args .iter() .any(|element| element == "-h" || element == "--help") { help(); return; } let mut flags = Flags::default(); // try!() if args .iter() .any(|element| element == "-k" || element == "--insecure") { flags.insecure = true; } let serverNameArg = args .iter() .enumerate() .find(|(index, element)| *element == "-servername"); if let Some((index, _)) = serverNameArg { flags.servername = args[index + 1].clone(); } // get port let maybe_port = args[args.len() - 1].parse::(); if maybe_port.is_ok() { // pull out of maybe option error flags.port = maybe_port.unwrap(); } else { help(); print!(" needs to be an integer"); } // get remote flags.remote = args[args.len() - 2].clone(); if args[args.len() - 3] == "ssh" || args[args.len() - 3] == "rsync" { flags.custom = args[args.len() - 3].clone(); } dbg!(flags); // tls port forward functionality // https://github.com/izderadicka/ptunnel-rust // https://github.com/ctz/rustls } #[derive(Default, Debug)] struct Flags { insecure: bool, servername: String, remote: String, custom: String, port: i32, }