Files
postmoogle/utils/utils.go
2022-11-08 21:21:06 +02:00

80 lines
1.6 KiB
Go

package utils
import (
"strconv"
"strings"
)
// Mailbox returns mailbox part from email address
func Mailbox(email string) string {
index := strings.LastIndex(email, "@")
if index == -1 {
return email
}
return email[:index]
}
// EmailsList returns human-readable list of mailbox's emails for all available domains
func EmailsList(mailbox string, domains []string) string {
var msg strings.Builder
count := len(domains) - 1
for i, domain := range domains {
msg.WriteString(mailbox)
msg.WriteString("@")
msg.WriteString(domain)
if i < count {
msg.WriteString(", ")
}
}
return msg.String()
}
// Hostname returns hostname part from email address
func Hostname(email string) string {
return email[strings.LastIndex(email, "@")+1:]
}
// Bool converts string to boolean
func Bool(str string) bool {
str = strings.ToLower(str)
if str == "" {
return false
}
return (str == "1" || str == "true" || str == "yes")
}
// SanitizeBoolString converts string to boolean and back to string
func SanitizeBoolString(str string) string {
return strconv.FormatBool(Bool(str))
}
// StringSlice converts comma-separated string to slice
func StringSlice(str string) []string {
if str == "" {
return nil
}
str = strings.TrimSpace(str)
if strings.IndexByte(str, ',') == -1 {
return []string{str}
}
return strings.Split(str, ",")
}
// SanitizeBoolString converts string to slice and back to string
func SanitizeStringSlice(str string) string {
parts := StringSlice(str)
if len(parts) == 0 {
return str
}
for i, part := range parts {
parts[i] = strings.TrimSpace(part)
}
return strings.Join(parts, ",")
}