|
|
|
package namespace
|
|
|
|
|
|
|
|
type FileSizeQuota struct {
|
|
|
|
AllowanceKB int64
|
|
|
|
CurrentUsage int64
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSizeQuota) Allows(size int64) bool {
|
|
|
|
return f.Remaining() >= size
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSizeQuota) Remaining() int64 {
|
|
|
|
return f.AllowanceKB - f.CurrentUsage
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSizeQuota) Add(size int64) (*FileSizeQuota, error) {
|
|
|
|
if !f.Allows(size) {
|
|
|
|
return nil, ErrExceedQuota
|
|
|
|
}
|
|
|
|
|
|
|
|
n := FileSizeQuota {
|
|
|
|
f.AllowanceKB,
|
|
|
|
f.CurrentUsage + size,
|
|
|
|
}
|
|
|
|
return &n, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSizeQuota) Remove(size int64) (*FileSizeQuota, error) {
|
|
|
|
if size > f.CurrentUsage {
|
|
|
|
return nil, ErrQuotaInvalid
|
|
|
|
}
|
|
|
|
|
|
|
|
n := FileSizeQuota {
|
|
|
|
f.AllowanceKB,
|
|
|
|
f.CurrentUsage - size,
|
|
|
|
}
|
|
|
|
return &n, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type FileStat struct {
|
|
|
|
Num int64
|
|
|
|
SizeB int64
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s FileStat) Add(size int64) FileStat {
|
|
|
|
return FileStat{
|
|
|
|
s.Num + 1,
|
|
|
|
s.SizeB + size,
|
|
|
|
}
|
|
|
|
}
|