You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cointop/cointop/util.go

86 lines
1.7 KiB
Go

package cointop
import (
"bytes"
"encoding/gob"
"fmt"
"regexp"
"strings"
"sync"
"github.com/cointop-sh/cointop/pkg/open"
log "github.com/sirupsen/logrus"
"golang.org/x/crypto/blake2b"
)
// OpenLink opens the url in a browser
func (ct *Cointop) OpenLink() error {
log.Debug("OpenLink()")
open.URL(ct.RowLink())
return nil
}
// OpenLink opens the alternate url in a browser
func (ct *Cointop) OpenAltLink() error {
log.Debug("OpenAltLink()")
open.URL(ct.RowAltLink())
return nil
}
// GetBytes returns the interface in bytes form
func GetBytes(key interface{}) ([]byte, error) {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
err := enc.Encode(key)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
// Slugify returns a slugified string
func Slugify(s string) string {
s = strings.TrimSpace(strings.ToLower(s))
return s
}
// TruncateString returns a truncated string
func TruncateString(value string, maxLen int) string {
dots := "..."
if len(value) > maxLen {
value = fmt.Sprintf("%s%s", value[0:maxLen-3], dots)
}
return value
}
// ClearSyncMap clears a sync.Map
func (ct *Cointop) ClearSyncMap(syncMap *sync.Map) {
syncMap.Range(func(key interface{}, value interface{}) bool {
syncMap.Delete(key)
return true
})
}
// NormalizeFloatString normalizes a float as a string
func normalizeFloatString(input string, allowNegative bool) string {
re := regexp.MustCompile(`(\d+\.\d+|\.\d+|\d+)`)
if allowNegative {
re = regexp.MustCompile(`-?(\d+\.\d+|\.\d+|\d+)`)
}
result := re.FindStringSubmatch(input)
if len(result) > 0 {
return result[0]
}
return ""
}
func getStructHash(x interface{}) (string, error) {
b, err := GetBytes(x)
if err != nil {
return "", err
}
return fmt.Sprintf("%x", blake2b.Sum256(b)), nil
}