diff options
Diffstat (limited to 'vendor/gopkg.in/cheggaaa/pb.v1/format.go')
-rw-r--r-- | vendor/gopkg.in/cheggaaa/pb.v1/format.go | 84 |
1 files changed, 61 insertions, 23 deletions
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/format.go b/vendor/gopkg.in/cheggaaa/pb.v1/format.go index d5aeff793..8bb8a7a1d 100644 --- a/vendor/gopkg.in/cheggaaa/pb.v1/format.go +++ b/vendor/gopkg.in/cheggaaa/pb.v1/format.go @@ -2,7 +2,6 @@ package pb import ( "fmt" - "strings" "time" ) @@ -11,12 +10,26 @@ type Units int const ( // U_NO are default units, they represent a simple value and are not formatted at all. U_NO Units = iota - // U_BYTES units are formatted in a human readable way (b, Bb, Mb, ...) + // U_BYTES units are formatted in a human readable way (B, KiB, MiB, ...) U_BYTES + // U_BYTES_DEC units are like U_BYTES, but base 10 (B, KB, MB, ...) + U_BYTES_DEC // U_DURATION units are formatted in a human readable way (3h14m15s) U_DURATION ) +const ( + KiB = 1024 + MiB = 1048576 + GiB = 1073741824 + TiB = 1099511627776 + + KB = 1e3 + MB = 1e6 + GB = 1e9 + TB = 1e12 +) + func Format(i int64) *formatter { return &formatter{n: i} } @@ -28,11 +41,6 @@ type formatter struct { perSec bool } -func (f *formatter) Value(n int64) *formatter { - f.n = n - return f -} - func (f *formatter) To(unit Units) *formatter { f.unit = unit return f @@ -52,13 +60,10 @@ func (f *formatter) String() (out string) { switch f.unit { case U_BYTES: out = formatBytes(f.n) + case U_BYTES_DEC: + out = formatBytesDec(f.n) case U_DURATION: - d := time.Duration(f.n) - if d > time.Hour*24 { - out = fmt.Sprintf("%dd", d/24/time.Hour) - d -= (d / time.Hour / 24) * (time.Hour * 24) - } - out = fmt.Sprintf("%s%v", out, d) + out = formatDuration(f.n) default: out = fmt.Sprintf(fmt.Sprintf("%%%dd", f.width), f.n) } @@ -68,20 +73,53 @@ func (f *formatter) String() (out string) { return } -// Convert bytes to human readable string. Like a 2 MB, 64.2 KB, 52 B +// Convert bytes to human readable string. Like 2 MiB, 64.2 KiB, 52 B func formatBytes(i int64) (result string) { switch { - case i > (1024 * 1024 * 1024 * 1024): - result = fmt.Sprintf("%.02f TB", float64(i)/1024/1024/1024/1024) - case i > (1024 * 1024 * 1024): - result = fmt.Sprintf("%.02f GB", float64(i)/1024/1024/1024) - case i > (1024 * 1024): - result = fmt.Sprintf("%.02f MB", float64(i)/1024/1024) - case i > 1024: - result = fmt.Sprintf("%.02f KB", float64(i)/1024) + case i >= TiB: + result = fmt.Sprintf("%.02f TiB", float64(i)/TiB) + case i >= GiB: + result = fmt.Sprintf("%.02f GiB", float64(i)/GiB) + case i >= MiB: + result = fmt.Sprintf("%.02f MiB", float64(i)/MiB) + case i >= KiB: + result = fmt.Sprintf("%.02f KiB", float64(i)/KiB) default: result = fmt.Sprintf("%d B", i) } - result = strings.Trim(result, " ") + return +} + +// Convert bytes to base-10 human readable string. Like 2 MB, 64.2 KB, 52 B +func formatBytesDec(i int64) (result string) { + switch { + case i >= TB: + result = fmt.Sprintf("%.02f TB", float64(i)/TB) + case i >= GB: + result = fmt.Sprintf("%.02f GB", float64(i)/GB) + case i >= MB: + result = fmt.Sprintf("%.02f MB", float64(i)/MB) + case i >= KB: + result = fmt.Sprintf("%.02f KB", float64(i)/KB) + default: + result = fmt.Sprintf("%d B", i) + } + return +} + +func formatDuration(n int64) (result string) { + d := time.Duration(n) + if d > time.Hour*24 { + result = fmt.Sprintf("%dd", d/24/time.Hour) + d -= (d / time.Hour / 24) * (time.Hour * 24) + } + if d > time.Hour { + result = fmt.Sprintf("%s%dh", result, d/time.Hour) + d -= d / time.Hour * time.Hour + } + m := d / time.Minute + d -= m * time.Minute + s := d / time.Second + result = fmt.Sprintf("%s%02dm%02ds", result, m, s) return } |