use std::env;
use std::process::exit;
use comandare::{Logger, listen, connect};
const MODES: [&str; 2] = [
"client",
"server"
];
const DEBUG_FLAGS: [&str; 2] = [
"--debug",
"-d"
];
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 3 {
eprintln!("[MODE] [HOST] [PORT] [:--DEBUG|-D] -- [:COMMAND]");
exit(1);
}
let mode = &args[1];
if !MODES.contains(&mode.as_str()) {
eprintln!("MODE must be 'client' or 'server'");
exit(1);
}
let host = &args[2];
let port = &args[3];
let port: u16 = match port.parse() {
Ok(n) => n,
Err(_) => 0,
};
let debug = args.iter().find(|argument| {
DEBUG_FLAGS.contains(&argument.to_lowercase().as_str())
});
let log = Logger::new(debug.is_some());
match mode.as_str() {
"server" => {
listen(log, host, port);
}
"client" => {
match args.iter().position(|x| x.eq("--")) {
Some(index) => {
let command_offset = index + 1;
let command: &str = &args[command_offset..args.len()].join(" ");
connect(log, host, port, command);
}
None => {
eprintln!("MODE 'client' requires COMMAND");
}
}
},
_ => {}
}
}