Files
EdgeCommon/pkg/serverconfigs/shared/bit_size_capacity.go
2024-01-11 15:22:37 +08:00

78 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package shared
import "encoding/json"
type BitSizeCapacityUnit = string
const (
BitSizeCapacityUnitB BitSizeCapacityUnit = "b"
BitSizeCapacityUnitKB BitSizeCapacityUnit = "kb"
BitSizeCapacityUnitMB BitSizeCapacityUnit = "mb"
BitSizeCapacityUnitGB BitSizeCapacityUnit = "gb"
BitSizeCapacityUnitTB BitSizeCapacityUnit = "tb"
BitSizeCapacityUnitPB BitSizeCapacityUnit = "pb"
BitSizeCapacityUnitEB BitSizeCapacityUnit = "eb"
//BitSizeCapacityUnitZB BitSizeCapacityUnit = "zb" // zb和yb超出int64范围暂不支持
//BitSizeCapacityUnitYB BitSizeCapacityUnit = "yb"
)
type BitSizeCapacity struct {
Count int64 `json:"count" yaml:"count"`
Unit BitSizeCapacityUnit `json:"unit" yaml:"unit"`
}
func NewBitSizeCapacity(count int64, unit BitSizeCapacityUnit) *BitSizeCapacity {
return &BitSizeCapacity{
Count: count,
Unit: unit,
}
}
func DecodeBitSizeCapacityJSON(sizeCapacityJSON []byte) (*BitSizeCapacity, error) {
var capacity = &BitSizeCapacity{}
err := json.Unmarshal(sizeCapacityJSON, capacity)
return capacity, err
}
func (this *BitSizeCapacity) Bits() int64 {
if this.Count < 0 {
return -1
}
switch this.Unit {
case BitSizeCapacityUnitB:
return this.Count
case BitSizeCapacityUnitKB:
return this.Count * this.pow(1)
case BitSizeCapacityUnitMB:
return this.Count * this.pow(2)
case BitSizeCapacityUnitGB:
return this.Count * this.pow(3)
case BitSizeCapacityUnitTB:
return this.Count * this.pow(4)
case BitSizeCapacityUnitPB:
return this.Count * this.pow(5)
case BitSizeCapacityUnitEB:
return this.Count * this.pow(6)
default:
return this.Count
}
}
func (this *BitSizeCapacity) IsNotEmpty() bool {
return this.Count > 0
}
func (this *BitSizeCapacity) AsJSON() ([]byte, error) {
return json.Marshal(this)
}
func (this *BitSizeCapacity) pow(n int) int64 {
if n <= 0 {
return 1
}
if n == 1 {
return 1024 // TODO 考虑是否使用1000进制
}
return this.pow(n-1) * 1024
}