diff options
Diffstat (limited to 'src/config/port.rs')
| -rw-r--r-- | src/config/port.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/config/port.rs b/src/config/port.rs new file mode 100644 index 0000000..01e305b --- /dev/null +++ b/src/config/port.rs @@ -0,0 +1,42 @@ +use std::ops::RangeInclusive; + +const PORT_RANGE: RangeInclusive<usize> = 1..=65535; + +pub fn port_in_range(s: &str) -> Result<u16, String> { + 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()); + } +} |
