pub fn truncate_on_char_boundary(s: &str, max_bytes: usize) -> &str {
if s.len() <= max_bytes {
return s;
}
let mut end = max_bytes;
while end > 0 && !s.is_char_boundary(end) {
end -= 1;
}
&s[..end]
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn truncate_keeps_short_strings_intact() {
assert_eq!(truncate_on_char_boundary("abc", 10), "abc");
}
#[test]
fn truncate_never_splits_a_multibyte_char() {
let s = "é".repeat(10); let out = truncate_on_char_boundary(&s, 5);
assert!(s.is_char_boundary(out.len()));
assert_eq!(out, "éé"); }
}