diff options
Diffstat (limited to 'src/utilities.rs')
| -rw-r--r-- | src/utilities.rs | 27 |
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() + } +} |