Files
EdgeCommon/pkg/serverconfigs/shared/size_capacity.go

65 lines
1.5 KiB
Go
Raw Normal View History

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"
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 {
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)
case SizeCapacityUnitTB:
2021-12-12 11:44:58 +08:00
return this.Count * this.pow(4)
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
}