57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// MaskAPIKey masks an API key for safe logging.
|
|
func MaskAPIKey(key string) string {
|
|
length := len(key)
|
|
if length <= 8 {
|
|
return key
|
|
}
|
|
return fmt.Sprintf("%s****%s", key[:4], key[length-4:])
|
|
}
|
|
|
|
// TruncateString shortens a string to a maximum length.
|
|
func TruncateString(s string, maxLength int) string {
|
|
if len(s) > maxLength {
|
|
return s[:maxLength]
|
|
}
|
|
return s
|
|
}
|
|
|
|
// SplitAndTrim splits a string by a separator
|
|
func SplitAndTrim(s string, sep string) []string {
|
|
if s == "" {
|
|
return []string{}
|
|
}
|
|
|
|
parts := strings.Split(s, sep)
|
|
result := make([]string, 0, len(parts))
|
|
|
|
for _, part := range parts {
|
|
trimmed := strings.TrimSpace(part)
|
|
if trimmed != "" {
|
|
result = append(result, trimmed)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// StringToSet converts a separator-delimited string into a set
|
|
func StringToSet(s string, sep string) map[string]struct{} {
|
|
parts := SplitAndTrim(s, sep)
|
|
if len(parts) == 0 {
|
|
return nil
|
|
}
|
|
|
|
set := make(map[string]struct{}, len(parts))
|
|
for _, part := range parts {
|
|
set[part] = struct{}{}
|
|
}
|
|
return set
|
|
}
|