alice-lg/backend/utils.go

90 lines
1.5 KiB
Go
Raw Normal View History

2017-06-30 11:21:01 +02:00
package main
// Some helper functions
import (
2017-06-30 12:05:46 +02:00
"regexp"
2017-07-10 14:19:36 +01:00
"strconv"
2017-06-30 11:21:01 +02:00
"strings"
2018-09-24 22:29:13 +02:00
"time"
2017-06-30 11:21:01 +02:00
)
/*
Case Insensitive Contains
*/
func ContainsCi(s, substr string) bool {
return strings.Contains(
strings.ToLower(s),
strings.ToLower(substr),
)
}
2017-06-30 12:05:46 +02:00
2017-06-30 15:02:12 +02:00
/*
Check array membership
*/
func MemberOf(list []string, key string) bool {
for _, v := range list {
if v == key {
return true
}
}
return false
}
2017-06-30 12:05:46 +02:00
/*
Check if something could be a prefix
*/
func MaybePrefix(s string) bool {
s = strings.ToLower(s)
2017-06-30 15:02:12 +02:00
// Rule out anything which can not be
if strings.ContainsAny(s, "ghijklmnopqrstuvwxyz][;'_") {
return false
}
2017-06-30 12:05:46 +02:00
// Test using regex
matches := regexp.MustCompile(`([a-f0-9/]+[\.:]?)+`).FindAllStringIndex(s, -1)
if len(matches) == 1 {
return true
}
return false
}
2017-07-10 14:19:36 +01:00
/*
Since havin ints as keys in json is
acutally undefined behaviour, we keep these interally
but provide a string as a key for serialization
*/
func SerializeReasons(reasons map[int]string) map[string]string {
res := make(map[string]string)
for id, reason := range reasons {
res[strconv.Itoa(id)] = reason
}
return res
}
2018-09-17 18:11:28 +02:00
/*
Make trimmed list of CSV strings.
Ommits empty values.
*/
func TrimmedStringList(s string) []string {
tokens := strings.Split(s, ",")
list := []string{}
for _, t := range tokens {
if t == "" {
continue
}
list = append(list, strings.TrimSpace(t))
}
return list
}
2018-09-24 22:29:13 +02:00
/*
Convert time.Duration to milliseconds
*/
func DurationMs(d time.Duration) float64 {
return float64(d) / 1000.0 / 1000.0 // nano -> micro -> milli
}