aboutsummaryrefslogtreecommitdiffstats
path: root/util/generic.go
diff options
context:
space:
mode:
Diffstat (limited to 'util/generic.go')
-rw-r--r--util/generic.go213
1 files changed, 0 insertions, 213 deletions
diff --git a/util/generic.go b/util/generic.go
deleted file mode 100644
index ded985d..0000000
--- a/util/generic.go
+++ /dev/null
@@ -1,213 +0,0 @@
-package util
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "runtime"
- "strconv"
- "strings"
- "time"
- "unicode/utf8"
-)
-
-// Prompt user to input data
-func Prompt(msg string) string {
- fmt.Printf(msg)
- var str string
- fmt.Scanln(&str)
- return str
-}
-
-// Returns true if file/directory exists
-func FileExists(path string) bool {
- _, err := os.Stat(path)
- if err == nil {
- return true
- }
- return false
-}
-
-func Mkdir(path string) error {
- dir := filepath.Dir(path)
- if FileExists(dir) {
- return nil
- }
- return os.Mkdir(dir, 0700)
-}
-
-// Returns the users home dir
-func Homedir() string {
- if runtime.GOOS == "windows" {
- return os.Getenv("APPDATA")
- }
- return os.Getenv("HOME")
-}
-
-func FormatBool(b bool) string {
- return strings.Title(strconv.FormatBool(b))
-}
-
-func FileSizeFormat(bytes int64, forceBytes bool) string {
- if forceBytes {
- return fmt.Sprintf("%v B", bytes)
- }
-
- units := []string{"B", "KB", "MB", "GB", "TB", "PB"}
-
- var i int
- value := float64(bytes)
-
- for value > 1000 {
- value /= 1000
- i++
- }
- return fmt.Sprintf("%.1f %s", value, units[i])
-}
-
-// Truncates string to given max length, and inserts ellipsis into
-// the middle of the string to signify that the string has been truncated
-func TruncateString(str string, maxRunes int) string {
- indicator := "..."
-
- // Number of runes in string
- runeCount := utf8.RuneCountInString(str)
-
- // Return input string if length of input string is less than max length
- // Input string is also returned if max length is less than 9 which is the minmal supported length
- if runeCount <= maxRunes || maxRunes < 9 {
- return str
- }
-
- // Number of remaining runes to be removed
- remaining := (runeCount - maxRunes) + utf8.RuneCountInString(indicator)
-
- var truncated string
- var skip bool
-
- for leftOffset, char := range str {
- rightOffset := runeCount - (leftOffset + remaining)
-
- // Start skipping chars when the left and right offsets are equal
- // Or in the case where we wont be able to do an even split: when the left offset is larger than the right offset
- if leftOffset == rightOffset || (leftOffset > rightOffset && !skip) {
- skip = true
- truncated += indicator
- }
-
- if skip && remaining > 0 {
- // Skip char and decrement the remaining skip counter
- remaining--
- continue
- }
-
- // Add char to result string
- truncated += string(char)
- }
-
- // Return truncated string
- return truncated
-}
-
-func ISODateToLocal(iso string) string {
- t, err := time.Parse(time.RFC3339, iso)
- if err != nil {
- return iso
- }
- local := t.Local()
- year, month, day := local.Date()
- hour, min, sec := local.Clock()
- return fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, min, sec)
-}
-
-func MeasureTransferRate() func(int64) string {
- start := time.Now()
-
- return func(bytes int64) string {
- seconds := int64(time.Now().Sub(start).Seconds())
- if seconds < 1 {
- return fmt.Sprintf("%s/s", FileSizeFormat(bytes, false))
- }
- bps := bytes / seconds
- return fmt.Sprintf("%s/s", FileSizeFormat(bps, false))
- }
-}
-
-// Prints a map in the provided order with one key-value-pair per line
-func Print(m map[string]string, keyOrder []string) {
- for _, key := range keyOrder {
- value, ok := m[key]
- if ok && value != "" {
- fmt.Printf("%s: %s\n", key, value)
- }
- }
-}
-
-// Prints items in columns with header and correct padding
-func PrintColumns(items []map[string]string, keyOrder []string, columnSpacing int, noHeader bool) {
-
- if !noHeader {
- // Create header
- header := make(map[string]string)
- for _, key := range keyOrder {
- header[key] = key
- }
-
- // Add header as the first element of items
- items = append([]map[string]string{header}, items...)
- }
-
- // Get a padding function for each column
- padFns := make(map[string]func(string) string)
- for _, key := range keyOrder {
- padFns[key] = columnPadder(items, key, columnSpacing)
- }
-
- // Loop, pad and print items
- for _, item := range items {
- var line string
-
- // Add each column to line with correct padding
- for _, key := range keyOrder {
- value, _ := item[key]
- line += padFns[key](value)
- }
-
- // Print line
- fmt.Println(line)
- }
-}
-
-// Returns a padding function, that pads input to the longest string in items
-func columnPadder(items []map[string]string, key string, spacing int) func(string) string {
- // Holds length of longest string
- var max int
-
- // Find the longest string of type key in the array
- for _, item := range items {
- str := item[key]
- length := utf8.RuneCountInString(str)
- if length > max {
- max = length
- }
- }
-
- // Return padding function
- return func(str string) string {
- column := str
- for utf8.RuneCountInString(column) < max+spacing {
- column += " "
- }
- return column
- }
-}
-
-func inArray(needle string, haystack []string) bool {
- for _, x := range haystack {
- if needle == x {
- return true
- }
- }
-
- return false
-}