aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2025-05-06 16:33:31 +0200
committerMax Audron <audron@cocaine.farm>2025-05-06 16:33:31 +0200
commitdaf361ea763de47d61860df75a1b8c9a88aa17eb (patch)
treeabc25d7dea8a4ac34906088e392572ce906ba940 /src/util
parentupdate dependencies (diff)
fix truncate on unicode
fuck unicode all my homies stan ascii
Diffstat (limited to 'src/util')
-rw-r--r--src/util/formatting/truncate.rs21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/util/formatting/truncate.rs b/src/util/formatting/truncate.rs
index 80caa23..9528492 100644
--- a/src/util/formatting/truncate.rs
+++ b/src/util/formatting/truncate.rs
@@ -1,3 +1,5 @@
+use unicode_segmentation::UnicodeSegmentation;
+
/// Truncates a string after a certain number of characters.
///
/// Function always tries to truncate on a word boundary.
@@ -6,15 +8,7 @@ pub fn truncate(text: &str, len: usize) -> String {
if text.len() <= len {
return text.to_string();
}
- format!(
- "{}…",
- text[..len]
- .rsplitn(2, " ")
- .collect::<Vec<&str>>()
- .last()
- .copied()
- .expect("This can never happen >inb4 it happens")
- )
+ format!("{}…", text.graphemes(true).take(len).collect::<String>())
}
#[cfg(test)]
@@ -39,7 +33,7 @@ mod tests {
fn test_truncate_with_input_of_greater_length_than_limit() {
let input = "some longer text";
let result = truncate(input, input.len() - 1);
- assert_eq!("some longer…", result)
+ assert_eq!("some longer tex…", result)
}
#[test]
@@ -48,4 +42,11 @@ mod tests {
let result = truncate(input, input.len() - 1);
assert_eq!("somelongertex…", result)
}
+
+ #[test]
+ fn test_truncate_with_unicode() {
+ let input = "short ° text";
+ let result = truncate(input, 7);
+ assert_eq!(result, "short °…")
+ }
}