mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-06-16 11:58:52 -04:00
The goutil that OpenCloud currently uses is one version from the release that adds FreeBSD support, this now compiles successfully on FreeBSD.
114 lines
2.3 KiB
Go
114 lines
2.3 KiB
Go
// Package strutil provide some string,char,byte util functions
|
|
package strutil
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
|
|
"github.com/gookit/goutil/comdef"
|
|
)
|
|
|
|
// OrCond return s1 on cond is True, OR return s2.
|
|
// Like: cond ? s1 : s2
|
|
func OrCond(cond bool, s1, s2 string) string {
|
|
if cond {
|
|
return s1
|
|
}
|
|
return s2
|
|
}
|
|
|
|
// BlankOr return default value on val is blank, otherwise return val
|
|
func BlankOr(val, defVal string) string {
|
|
val = strings.TrimSpace(val)
|
|
if val != "" {
|
|
return val
|
|
}
|
|
return defVal
|
|
}
|
|
|
|
// ZeroOr return default value on val is zero, otherwise return val. same of OrElse()
|
|
func ZeroOr[T ~string](val, defVal T) T {
|
|
if val != "" {
|
|
return val
|
|
}
|
|
return defVal
|
|
}
|
|
|
|
// ErrorOr return default value on err is not nil, otherwise return s
|
|
// func ErrorOr(s string, err error, defVal string) string {
|
|
// if err != nil {
|
|
// return defVal
|
|
// }
|
|
// return s
|
|
// }
|
|
|
|
// OrElse return default value on s is empty, otherwise return s
|
|
func OrElse(s, orVal string) string {
|
|
if s != "" {
|
|
return s
|
|
}
|
|
return orVal
|
|
}
|
|
|
|
// OrElseNilSafe return default value on s is nil, otherwise return s
|
|
func OrElseNilSafe(s *string, orVal string) string {
|
|
if s == nil || *s == "" {
|
|
return orVal
|
|
}
|
|
return *s
|
|
}
|
|
|
|
// OrHandle return fn(s) on s is not empty.
|
|
func OrHandle(s string, fn comdef.StringHandleFunc) string {
|
|
if s != "" {
|
|
return fn(s)
|
|
}
|
|
return s
|
|
}
|
|
|
|
// Valid return first not empty element.
|
|
func Valid(ss ...string) string {
|
|
for _, s := range ss {
|
|
if s != "" {
|
|
return s
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// SubstrCount returns the number of times the substr substring occurs in the s string.
|
|
// Actually, it comes from strings.Count().
|
|
//
|
|
// - s The string to search in
|
|
// - substr The substring to search for
|
|
// - params[0] The offset where to start counting.
|
|
// - params[1] The maximum length after the specified offset to search for the substring.
|
|
func SubstrCount(s, substr string, params ...uint64) (int, error) {
|
|
larg := len(params)
|
|
hasArgs := larg != 0
|
|
if hasArgs && larg > 2 {
|
|
return 0, errors.New("too many parameters")
|
|
}
|
|
if !hasArgs {
|
|
return strings.Count(s, substr), nil
|
|
}
|
|
|
|
strlen := len(s)
|
|
offset := 0
|
|
end := strlen
|
|
|
|
if hasArgs {
|
|
offset = int(params[0])
|
|
if larg == 2 {
|
|
length := int(params[1])
|
|
end = offset + length
|
|
}
|
|
if end > strlen {
|
|
end = strlen
|
|
}
|
|
}
|
|
|
|
s = string([]rune(s)[offset:end])
|
|
return strings.Count(s, substr), nil
|
|
}
|