use std::{env, process};
const DEFAULT_HOST: &str = "127.0.0.1";
fn main() {
let args: Vec<String> = env::args().collect();
let (host, start_port) = match args.len() {
2 => {
(DEFAULT_HOST, parse_port(&args[1]))
}
3 => {
(args[1].as_str(), parse_port(&args[2]))
}
_ => {
eprintln!("Usage: find_port [host] <port>");
eprintln!();
eprintln!("Examples:");
eprintln!(" find_port 8888 # Find available port starting from 8888 on 127.0.0.1");
eprintln!(" find_port 0.0.0.0 3000 # Find available port starting from 3000 on 0.0.0.0");
process::exit(1);
}
};
match find_port::find_port(host, start_port) {
Some(port) => {
println!("{port}");
}
None => {
eprintln!("Error: no available port found starting from {start_port}");
process::exit(1);
}
}
}
fn parse_port(s: &str) -> u16 {
s.parse().unwrap_or_else(|_| {
eprintln!("Error: '{s}' is not a valid port number (0–65535)");
process::exit(1);
})
}