aboutsummaryrefslogtreecommitdiff
path: root/src/utilities.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/utilities.rs')
-rw-r--r--src/utilities.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/utilities.rs b/src/utilities.rs
index 1eb4831..663c26f 100644
--- a/src/utilities.rs
+++ b/src/utilities.rs
@@ -40,3 +40,30 @@ pub fn params_to_hashmap(
.map(|(k, v)| (k.to_string(), v.to_string()))
.collect()
}
+
+/// Normalizes a path by removing all trailing slashes, unless it's the root
+/// path "/".
+///
+/// # Examples
+///
+/// ```rust
+/// assert_eq!(
+/// windmark::utilities::normalize_path_slashes("/foo///"),
+/// "/foo"
+/// );
+/// assert_eq!(windmark::utilities::normalize_path_slashes("/foo/"), "/foo");
+/// assert_eq!(windmark::utilities::normalize_path_slashes("/foo"), "/foo");
+/// assert_eq!(windmark::utilities::normalize_path_slashes("/"), "/");
+/// ```
+#[must_use]
+pub fn normalize_path_slashes(path: &str) -> String {
+ if path == "/" {
+ return "/".to_string();
+ }
+
+ if path.ends_with('/') {
+ path.trim_end_matches('/').to_string()
+ } else {
+ path.to_string()
+ }
+}