teldrive/internal/utils/utils.go

62 lines
1 KiB
Go

package utils
import (
"os"
"path/filepath"
"regexp"
"strings"
)
func CamelToSnake(input string) string {
re := regexp.MustCompile("([a-z0-9])([A-Z])")
snake := re.ReplaceAllString(input, "${1}_${2}")
return strings.ToLower(snake)
}
func Ptr[T any](t T) *T {
return &t
}
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
func ExecutableDir() string {
path, _ := os.Executable()
return filepath.Dir(path)
}
func Filter[T any](slice []T, predicate func(T) bool) []T {
var result []T
for _, v := range slice {
if predicate(v) {
result = append(result, v)
}
}
return result
}
func Map[T any, U any](slice []T, mapper func(T) U) []U {
var result []U
for _, v := range slice {
result = append(result, mapper(v))
}
return result
}
func Find[T any](slice []T, predicate func(T) bool) (T, bool) {
for _, v := range slice {
if predicate(v) {
return v, true
}
}
var zero T
return zero, false
}