bern_units/
memory_size.rs1use derive_more::{Add, Sub, Mul, Div};
4
5#[derive(PartialEq, PartialOrd, Clone, Copy, Debug, Add, Sub, Mul, Div)]
6pub struct Byte(pub u32);
7
8#[derive(PartialEq, PartialOrd, Clone, Copy, Debug, Add, Sub, Mul, Div)]
9pub struct KiloByte(pub u32);
10
11#[derive(PartialEq, PartialOrd, Clone, Copy, Debug, Add, Sub, Mul, Div)]
12pub struct MegaByte(pub u32);
13
14#[derive(PartialEq, PartialOrd, Clone, Copy, Debug, Add, Sub, Mul, Div)]
15pub struct GigaByte(pub u32);
16
17#[allow(non_snake_case)]
20impl Byte {
21 pub const fn from_kB(kb: u32) -> Self {
22 Byte(kb * 1_024)
23 }
24
25 pub const fn from_MB(mb: u32) -> Self {
26 Byte(mb * 1_024 * 1_024)
27 }
28
29 pub const fn from_GB(gb: u32) -> Self {
30 Byte(gb * 1_024 * 1_024 * 1_024)
31 }
32}
33
34#[allow(non_snake_case)]
36pub trait ExtByte {
37 fn B(self) -> Byte;
39
40 fn kB(self) -> KiloByte;
42
43 fn MB(self) -> MegaByte;
45
46 fn GB(self) -> GigaByte;
48}
49
50#[allow(non_snake_case)]
51impl ExtByte for u32 {
52 fn B(self) -> Byte {
53 Byte(self)
54 }
55
56 fn kB(self) -> KiloByte {
57 KiloByte(self)
58 }
59
60 fn MB(self) -> MegaByte {
61 MegaByte(self)
62 }
63
64 fn GB(self) -> GigaByte {
65 GigaByte(self)
66 }
67}
68
69impl Into<u32> for Byte {
70 fn into(self) -> u32 {
71 self.0
72 }
73}
74
75impl Into<usize> for Byte {
76 fn into(self) -> usize {
77 self.0 as usize
78 }
79}
80
81
82impl From<u32> for Byte {
83 fn from(b: u32) -> Self {
84 b.B()
85 }
86}
87
88
89impl From<KiloByte> for Byte {
90 fn from(kb: KiloByte) -> Self {
91 Self(kb.0 * 1_024)
92 }
93}
94
95
96impl From<MegaByte> for Byte {
97 fn from(mb: MegaByte) -> Self {
98 Self(mb.0 * 1_024 * 1_024)
99 }
100}
101
102impl From<MegaByte> for KiloByte {
103 fn from(mb: MegaByte) -> Self {
104 Self(mb.0 * 1_024)
105 }
106}
107
108
109impl From<GigaByte> for Byte {
110 fn from(gb: GigaByte) -> Self {
111 Self(gb.0 * 1_024 * 1_024 * 1_024)
112 }
113}
114
115impl From<GigaByte> for KiloByte {
116 fn from(gb: GigaByte) -> Self {
117 Self(gb.0 * 1_024 * 1_024)
118 }
119}
120
121impl From<GigaByte> for MegaByte {
122 fn from(gb: GigaByte) -> Self {
123 Self(gb.0 * 1_024)
124 }
125}