Make truncate_and_trailoff a bit more clear

Petros Amoiridis and Max Brunsfeld created

Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>

Change summary

crates/util/src/lib.rs | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)

Detailed changes

crates/util/src/lib.rs ๐Ÿ”—

@@ -46,10 +46,10 @@ pub fn truncate(s: &str, max_chars: usize) -> &str {
 pub fn truncate_and_trailoff(s: &str, max_chars: usize) -> String {
     debug_assert!(max_chars >= 5);
 
-    if s.len() > max_chars {
-        format!("{}โ€ฆ", truncate(s, max_chars.saturating_sub(3)))
-    } else {
-        s.to_string()
+    let truncation_ix = s.char_indices().map(|(i, _)| i).nth(max_chars);
+    match truncation_ix {
+        Some(length) => s[..length].to_string() + "โ€ฆ",
+        None => s.to_string(),
     }
 }
 
@@ -279,12 +279,9 @@ mod tests {
 
     #[test]
     fn test_trancate_and_trailoff() {
-        const MAX_CHARS: usize = 24;
-        assert_eq!(
-            truncate_and_trailoff("ajouter un compte d'รจรจรจรจs", MAX_CHARS),
-            "ajouter un compte d'รจโ€ฆ"
-        );
-        assert_eq!(truncate_and_trailoff("ajouter", MAX_CHARS), "ajouter");
-        assert_eq!(truncate_and_trailoff("", MAX_CHARS), "");
+        assert_eq!(truncate_and_trailoff("", 5), "");
+        assert_eq!(truncate_and_trailoff("รจรจรจรจรจรจ", 7), "รจรจรจรจรจรจ");
+        assert_eq!(truncate_and_trailoff("รจรจรจรจรจรจ", 6), "รจรจรจรจรจรจ");
+        assert_eq!(truncate_and_trailoff("รจรจรจรจรจรจ", 5), "รจรจรจรจรจโ€ฆ");
     }
 }