aboutsummaryrefslogtreecommitdiffstats
path: root/src/config/port.rs
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2026-02-01 13:33:07 +0200
committerrtkay123 <dev@kanjala.com>2026-02-01 13:33:07 +0200
commitce65d9eeafcd1f9d5c3adef1c9b1af6258ee711a (patch)
tree953f6c49f8affd667ec740a949b2d93f82b7d31b /src/config/port.rs
parent6a9d21bc87f8a738e14f27a1305bf04d0c4b7a0c (diff)
downloadsellershut-ce65d9eeafcd1f9d5c3adef1c9b1af6258ee711a.tar.bz2
sellershut-ce65d9eeafcd1f9d5c3adef1c9b1af6258ee711a.zip
feat: conn to db
Diffstat (limited to 'src/config/port.rs')
-rw-r--r--src/config/port.rs42
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());
+ }
+}