summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/labstack/gommon/bytes/bytes.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/labstack/gommon/bytes/bytes.go')
-rw-r--r--vendor/github.com/labstack/gommon/bytes/bytes.go68
1 files changed, 35 insertions, 33 deletions
diff --git a/vendor/github.com/labstack/gommon/bytes/bytes.go b/vendor/github.com/labstack/gommon/bytes/bytes.go
index fd97e6d1..746436cb 100644
--- a/vendor/github.com/labstack/gommon/bytes/bytes.go
+++ b/vendor/github.com/labstack/gommon/bytes/bytes.go
@@ -7,12 +7,12 @@ import (
)
type (
- Bytes struct {
- }
+ // Bytes struct
+ Bytes struct{}
)
const (
- B = 1 << (10 * iota)
+ _ = 1.0 << (10 * iota) // ignore first value by assigning to blank identifier
KB
MB
GB
@@ -22,7 +22,7 @@ const (
)
var (
- pattern = regexp.MustCompile(`(?i)^(-?\d+)([KMGTP]B?|B)$`)
+ pattern = regexp.MustCompile(`(?i)^(-?\d+(?:\.\d+)?)([KMGTPE]B?|B?)$`)
global = New()
)
@@ -38,29 +38,31 @@ func (*Bytes) Format(b int64) string {
value := float64(b)
switch {
- case b < KB:
- return strconv.FormatInt(b, 10) + "B"
- case b < MB:
- value /= KB
- multiple = "KB"
- case b < MB:
- value /= KB
- multiple = "KB"
- case b < GB:
- value /= MB
- multiple = "MB"
- case b < TB:
- value /= GB
- multiple = "GB"
- case b < PB:
- value /= TB
- multiple = "TB"
- case b < EB:
+ case b >= EB:
+ value /= EB
+ multiple = "EB"
+ case b >= PB:
value /= PB
multiple = "PB"
+ case b >= TB:
+ value /= TB
+ multiple = "TB"
+ case b >= GB:
+ value /= GB
+ multiple = "GB"
+ case b >= MB:
+ value /= MB
+ multiple = "MB"
+ case b >= KB:
+ value /= KB
+ multiple = "KB"
+ case b == 0:
+ return "0"
+ default:
+ return strconv.FormatInt(b, 10) + "B"
}
- return fmt.Sprintf("%.02f%s", value, multiple)
+ return fmt.Sprintf("%.2f%s", value, multiple)
}
// Parse parses human readable bytes string to bytes integer.
@@ -72,27 +74,27 @@ func (*Bytes) Parse(value string) (i int64, err error) {
}
bytesString := parts[1]
multiple := parts[2]
- bytes, err := strconv.ParseInt(bytesString, 10, 64)
+ bytes, err := strconv.ParseFloat(bytesString, 64)
if err != nil {
return
}
switch multiple {
- case "B":
- return bytes * B, nil
+ default:
+ return int64(bytes), nil
case "K", "KB":
- return bytes * KB, nil
+ return int64(bytes * KB), nil
case "M", "MB":
- return bytes * MB, nil
+ return int64(bytes * MB), nil
case "G", "GB":
- return bytes * GB, nil
+ return int64(bytes * GB), nil
case "T", "TB":
- return bytes * TB, nil
+ return int64(bytes * TB), nil
case "P", "PB":
- return bytes * PB, nil
+ return int64(bytes * PB), nil
+ case "E", "EB":
+ return int64(bytes * EB), nil
}
-
- return
}
// Format wraps global Bytes's Format function.