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) error { if !f.Allows(size) { return ErrExceedQuota } f.CurrentUsage += size return nil } func (f *FileSizeQuota) Remove(size int64) error { if size > f.CurrentUsage { return ErrQuotaInvalid } f.CurrentUsage -= size return nil } type FileStat struct { Num int64 SizeB int64 } func (s FileStat) Add(size int64) FileStat { return FileStat{ s.Num + 1, s.SizeB + size, } }