pub fn safe_truncate_utf8(s: impl AsRef<str>, max_chars: usize) -> String {
s.as_ref().chars().take(max_chars).collect()
}
pub fn debug_long_utf8(s: impl AsRef<str>, max_chars: usize) -> String {
if cfg!(feature = "truncate-debug") {
let trunc = safe_truncate_utf8(&s, max_chars);
format!("{} ({})", trunc, s.as_ref().chars().count())
} else {
s.as_ref().into()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_safe_truncate_str_with_utf8_char_boundary() {
let s = "🦀".repeat(101);
assert_eq!(safe_truncate_utf8(&s, 100).chars().count(), 100);
let s = "Jürgen".repeat(100);
assert_eq!(safe_truncate_utf8(&s, 100).chars().count(), 100);
}
}