// Copyright (C) MongoDB, Inc. 2024-present. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package bsoncoreutil // Truncate truncates a given string for a certain width func Truncate(str string, width int) string { if width == 0 { return "" } if len(str) <= width { return str } // Truncate the byte slice of the string to the given width. newStr := str[:width] // Check if the last byte is at the beginning of a multi-byte character. // If it is, then remove the last byte. if newStr[len(newStr)-1]&0xC0 == 0xC0 { return newStr[:len(newStr)-1] } // Check if the last byte is a multi-byte character if newStr[len(newStr)-1]&0xC0 == 0x80 { // If it is, step back until you we are at the start of a character for i := len(newStr) - 1; i >= 0; i-- { if newStr[i]&0xC0 == 0xC0 { // Truncate at the end of the character before the character we stepped back to return newStr[:i] } } } return newStr }