2020-09-13 19:27:47 +08:00
|
|
|
|
package shared
|
|
|
|
|
|
|
2020-09-16 09:09:31 +08:00
|
|
|
|
import "encoding/json"
|
|
|
|
|
|
|
2020-09-13 19:27:47 +08:00
|
|
|
|
type SizeCapacityUnit = string
|
|
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
|
SizeCapacityUnitByte SizeCapacityUnit = "byte"
|
|
|
|
|
|
SizeCapacityUnitKB SizeCapacityUnit = "kb"
|
|
|
|
|
|
SizeCapacityUnitMB SizeCapacityUnit = "mb"
|
|
|
|
|
|
SizeCapacityUnitGB SizeCapacityUnit = "gb"
|
2021-10-21 17:09:59 +08:00
|
|
|
|
SizeCapacityUnitTB SizeCapacityUnit = "tb"
|
|
|
|
|
|
SizeCapacityUnitPB SizeCapacityUnit = "pb"
|
2021-12-12 11:44:58 +08:00
|
|
|
|
SizeCapacityUnitEB SizeCapacityUnit = "eb"
|
|
|
|
|
|
//SizeCapacityUnitZB SizeCapacityUnit = "zb" // zb和yb超出int64范围,暂不支持
|
|
|
|
|
|
//SizeCapacityUnitYB SizeCapacityUnit = "yb"
|
2020-09-13 19:27:47 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type SizeCapacity struct {
|
|
|
|
|
|
Count int64 `json:"count" yaml:"count"`
|
|
|
|
|
|
Unit SizeCapacityUnit `json:"unit" yaml:"unit"`
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (this *SizeCapacity) Bytes() int64 {
|
2021-10-21 17:09:59 +08:00
|
|
|
|
if this.Count < 0 {
|
|
|
|
|
|
return -1
|
|
|
|
|
|
}
|
2020-09-13 19:27:47 +08:00
|
|
|
|
switch this.Unit {
|
|
|
|
|
|
case SizeCapacityUnitByte:
|
|
|
|
|
|
return this.Count
|
|
|
|
|
|
case SizeCapacityUnitKB:
|
2021-12-12 11:44:58 +08:00
|
|
|
|
return this.Count * this.pow(1)
|
2020-09-13 19:27:47 +08:00
|
|
|
|
case SizeCapacityUnitMB:
|
2021-12-12 11:44:58 +08:00
|
|
|
|
return this.Count * this.pow(2)
|
2020-09-13 19:27:47 +08:00
|
|
|
|
case SizeCapacityUnitGB:
|
2021-12-12 11:44:58 +08:00
|
|
|
|
return this.Count * this.pow(3)
|
2021-10-21 17:09:59 +08:00
|
|
|
|
case SizeCapacityUnitTB:
|
2021-12-12 11:44:58 +08:00
|
|
|
|
return this.Count * this.pow(4)
|
2021-10-21 17:09:59 +08:00
|
|
|
|
case SizeCapacityUnitPB:
|
2021-12-12 11:44:58 +08:00
|
|
|
|
return this.Count * this.pow(5)
|
|
|
|
|
|
case SizeCapacityUnitEB:
|
|
|
|
|
|
return this.Count * this.pow(6)
|
2020-09-13 19:27:47 +08:00
|
|
|
|
default:
|
|
|
|
|
|
return this.Count
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-09-16 09:09:31 +08:00
|
|
|
|
|
2022-03-16 15:24:56 +08:00
|
|
|
|
func (this *SizeCapacity) IsNotEmpty() bool {
|
|
|
|
|
|
return this.Count > 0
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-16 09:09:31 +08:00
|
|
|
|
func (this *SizeCapacity) AsJSON() ([]byte, error) {
|
|
|
|
|
|
return json.Marshal(this)
|
|
|
|
|
|
}
|
2021-12-12 11:44:58 +08:00
|
|
|
|
|
|
|
|
|
|
func (this *SizeCapacity) pow(n int) int64 {
|
|
|
|
|
|
if n <= 0 {
|
|
|
|
|
|
return 1
|
|
|
|
|
|
}
|
|
|
|
|
|
if n == 1 {
|
|
|
|
|
|
return 1024
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.pow(n-1) * 1024
|
|
|
|
|
|
}
|