strings.rs (687B)
1 pub fn truncate_log(s: &str, max: usize) -> &str { 2 if s.len() > max { 3 let mut idx = max; 4 while idx > 0 && !s.is_char_boundary(idx) { 5 idx -= 1; 6 } 7 &s[..idx] 8 } else { 9 s 10 } 11 } 12 13 #[cfg(test)] 14 mod tests { 15 use super::truncate_log; 16 17 #[test] 18 fn truncate_log_no_change_when_under_limit() { 19 let value = "alpha"; 20 assert_eq!(truncate_log(value, 10), value); 21 } 22 23 #[test] 24 fn truncate_log_respects_char_boundary() { 25 let value = "a✓b"; 26 assert_eq!(truncate_log(value, 2), "a"); 27 assert_eq!(truncate_log(value, 3), "a"); 28 assert_eq!(truncate_log(value, 4), "a✓"); 29 } 30 }