From 27a76fcef71904dad6a39322fd0ce9f2c726a7d1 Mon Sep 17 00:00:00 2001 From: Akbar Rahman Date: Thu, 28 May 2026 17:46:19 +0100 Subject: [PATCH] ignore trailing slashes and query params --- src/main.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 96f3eef..92ebf4b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,22 @@ enum ResponseCode { NotFound, } +/// Remove query parameters and trailing slashes. +/// Makes all paths lowercase. +fn normalise_path(path: &str) -> String { + let mut path = path + .split('?') + .next() + .expect("split operation returns at least one substring"); + if path.len() > 1 + && let Some('/') = path.chars().next_back() + { + path = &path[0..path.len() - 1]; + } + + path.to_lowercase() +} + async fn simple_response(mut socket: BufStream, rc: ResponseCode) { let rc = match rc { ResponseCode::BadRequest => "400 Bad Request", @@ -46,7 +62,8 @@ async fn process_socket(mut socket: BufStream, urlmap: Arc Result<(), Box> { if url_pair .chars() .next() - .expect("String is longer than 1 character") + .expect("String at least 1 character") != '/' { continue; @@ -115,7 +132,7 @@ async fn main() -> Result<(), Box> { Err(format!("Unable to parse line: '{}'", url_pair))? }; - urlmap.insert(slug.to_lowercase(), redirect.to_string()); + urlmap.insert(normalise_path(slug), redirect.to_string()); } let urlmap = Arc::new(urlmap);