mark2web/vendor/github.com/gosuri/uiprogress/util/strutil/strutil.go
Sebastian Frank a781485c0a
Some checks failed
continuous-integration/drone/push Build is failing
no git submodules
2022-02-28 10:28:34 +01:00

62 lines
1.7 KiB
Go

// Package strutil provides various utilities for manipulating strings
package strutil
import (
"bytes"
"time"
)
// PadRight returns a new string of a specified length in which the end of the current string is padded with spaces or with a specified Unicode character.
func PadRight(str string, length int, pad byte) string {
if len(str) >= length {
return str
}
buf := bytes.NewBufferString(str)
for i := 0; i < length-len(str); i++ {
buf.WriteByte(pad)
}
return buf.String()
}
// PadLeft returns a new string of a specified length in which the beginning of the current string is padded with spaces or with a specified Unicode character.
func PadLeft(str string, length int, pad byte) string {
if len(str) >= length {
return str
}
var buf bytes.Buffer
for i := 0; i < length-len(str); i++ {
buf.WriteByte(pad)
}
buf.WriteString(str)
return buf.String()
}
// Resize resizes the string with the given length. It ellipses with '...' when the string's length exceeds
// the desired length or pads spaces to the right of the string when length is smaller than desired
func Resize(s string, length uint) string {
n := int(length)
if len(s) == n {
return s
}
// Pads only when length of the string smaller than len needed
s = PadRight(s, n, ' ')
if len(s) > n {
b := []byte(s)
var buf bytes.Buffer
for i := 0; i < n-3; i++ {
buf.WriteByte(b[i])
}
buf.WriteString("...")
s = buf.String()
}
return s
}
// PrettyTime returns the string representation of the duration. It rounds the time duration to a second and returns a "---" when duration is 0
func PrettyTime(t time.Duration) string {
if t == 0 {
return "---"
}
return (t - (t % time.Second)).String()
}