@@ -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), "รจรจรจรจรจโฆ");
}
}