Truncate a string to a maximum length, adding ellipsis if needed. This function handles Unicode characters correctly by counting grapheme clusters rather than bytes, ensuring we never split a multi-byte character. # Arguments `s` - The string to truncate `max_len` - Maximum character length including ellipsis # Returns The truncated string. # Example ```rust,ignore assert_eq!(truncate_strin
(s: &str, max_len: usize)
| 582 | /// assert_eq!(truncate_string("Short", 8), "Short"); |
| 583 | /// ``` |
| 584 | pub fn truncate_string(s: &str, max_len: usize) -> String { |
| 585 | let char_count = s.chars().count(); |
| 586 | if char_count <= max_len { |
| 587 | s.to_string() |
| 588 | } else if max_len <= 3 { |
| 589 | s.chars().take(max_len).collect() |
| 590 | } else { |
| 591 | let truncated: String = s.chars().take(max_len - 3).collect(); |
| 592 | format!("{}...", truncated) |
| 593 | } |
| 594 | } |
| 595 | |
| 596 | /// Format an author for display from an `Author` struct. |
| 597 | /// |