use std::ops::RangeInclusive; const PORT_RANGE: RangeInclusive = 1..=65535; pub fn port_in_range(s: &str) -> Result { let port = s .parse() .map_err(|_| format!("{s} is not a valid port number"))?; if PORT_RANGE.contains(&port) { Ok(port as u16) } else { Err(format!( "port not in range {}-{}", PORT_RANGE.start(), PORT_RANGE.end() )) } } #[cfg(test)] mod tests { use rand::Rng; use super::*; #[test] fn in_port_range() { let mut rng = rand::rng(); let num = rng.random_range(PORT_RANGE); assert!(port_in_range(&num.to_string()).is_ok()); } #[test] fn outside_port_range() { let mut rng = rand::rng(); let num = rng.random_range((65535 + 1)..=usize::MAX); assert!(port_in_range(&num.to_string()).is_err()); } }