use unicode_segmentation::UnicodeSegmentation;
pub(crate) fn take_n_graphemes(s: &str, n: usize) -> String {
let mut out = String::new();
for (i, g) in UnicodeSegmentation::graphemes(s, true).enumerate() {
if i >= n {
break;
}
out.push_str(g);
}
out
}
pub(crate) fn truncate_at_n_graphemes(s: &str, n: usize) -> String {
let mut out = String::new();
let mut iter = UnicodeSegmentation::graphemes(s, true);
for (i, g) in iter.by_ref().enumerate() {
if i >= n {
break;
}
out.push_str(g);
}
if iter.next().is_some() {
out.push('…');
}
out
}