17 lines
443 B
Go
17 lines
443 B
Go
|
|
package utils
|
||
|
|
|
||
|
|
// Truncate returns a truncated version of s with at most maxLen runes.
|
||
|
|
// Handles multi-byte Unicode characters properly.
|
||
|
|
// If the string is truncated, "..." is appended to indicate truncation.
|
||
|
|
func Truncate(s string, maxLen int) string {
|
||
|
|
runes := []rune(s)
|
||
|
|
if len(runes) <= maxLen {
|
||
|
|
return s
|
||
|
|
}
|
||
|
|
// Reserve 3 chars for "..."
|
||
|
|
if maxLen <= 3 {
|
||
|
|
return string(runes[:maxLen])
|
||
|
|
}
|
||
|
|
return string(runes[:maxLen-3]) + "..."
|
||
|
|
}
|