package strongunits // supported units // B represents bytes. type B uint64 // KiB represents KiB. type KiB uint64 // MiB represents MiB. type MiB uint64 // GiB represents GiB. type GiB uint64 const ( // kibToB is the math convert from bytes to KiB. kibToB = 1 << 10 // mibToB is the math to convert from bytes to MiB. mibToB = 1 << 20 // gibToB s the math to convert from bytes to GiB. gibToB = 1 << 30 ) // StorageUnits is an interface for converting disk/memory storage // units amongst each other. type StorageUnits interface { ToBytes() B } // ToBytes is a pass-through function for bytes. func (b B) ToBytes() B { return b } // ToBytes converts KiB to bytes. func (k KiB) ToBytes() B { return B(k * kibToB) } // ToBytes converts MiB to bytes. func (m MiB) ToBytes() B { return B(m * mibToB) } // ToBytes converts GiB to bytes. func (g GiB) ToBytes() B { return B(g * gibToB) } // ToKiB converts any StorageUnit type to KiB. func ToKiB(b StorageUnits) KiB { return KiB(b.ToBytes() >> 10) } // ToMib converts any StorageUnit type to MiB. func ToMib(b StorageUnits) MiB { return MiB(b.ToBytes() >> 20) } // ToGiB converts any StorageUnit type to GiB. func ToGiB(b StorageUnits) GiB { return GiB(b.ToBytes() >> 30) }