package main import ( "crypto/sha256" "encoding/hex" "net/url" "strconv" "strings" ) type stringSet struct { values map[string]bool } func NewStringSet(values ...string) *stringSet { s := &stringSet{ values: make(map[string]bool, len(values)), } for _, v := range values { s.Add(v) } return s } func (s *stringSet) Add(v string) { s.values[v] = true } func (s *stringSet) Contains(k string) bool { _, ok := s.values[k] return ok } func URLMustParse(u string) *url.URL { o, err := url.Parse(u) if err != nil { panic(err) } return o } func CompareUpper(lhs, rhs string) bool { return strings.ToUpper(lhs) == strings.ToUpper(rhs) } func HostFromURL(u string) string { o, err := url.Parse(u) if err != nil { return "" } h := strings.Split(o.Host, ":") return h[0] } func Sha256Hex(v string) string { s256 := sha256.New() s256.Write([]byte(v)) return hex.EncodeToString(s256.Sum(nil)) } func StringListFromInt(i int64) []string { return []string{strconv.FormatInt(i, 10)} }