memento_cache/core/
byte_size.rs1pub trait ByteSize {
13 fn bytes(self) -> usize;
15 fn kb(self) -> usize;
17 fn mb(self) -> usize;
19 fn gb(self) -> usize;
21}
22
23impl ByteSize for usize {
24 fn bytes(self) -> usize {
25 self
26 }
27
28 fn kb(self) -> usize {
29 self * 1024
30 }
31
32 fn mb(self) -> usize {
33 self * 1024 * 1024
34 }
35
36 fn gb(self) -> usize {
37 self * 1024 * 1024 * 1024
38 }
39}
40
41impl ByteSize for u64 {
42 fn bytes(self) -> usize {
43 self as usize
44 }
45
46 fn kb(self) -> usize {
47 (self * 1024) as usize
48 }
49
50 fn mb(self) -> usize {
51 (self * 1024 * 1024) as usize
52 }
53
54 fn gb(self) -> usize {
55 (self * 1024 * 1024 * 1024) as usize
56 }
57}
58
59impl ByteSize for i32 {
60 fn bytes(self) -> usize {
61 self as usize
62 }
63
64 fn kb(self) -> usize {
65 (self as usize) * 1024
66 }
67
68 fn mb(self) -> usize {
69 (self as usize) * 1024 * 1024
70 }
71
72 fn gb(self) -> usize {
73 (self as usize) * 1024 * 1024 * 1024
74 }
75}
76
77#[cfg(test)]
78mod tests {
79 use super::*;
80
81 #[test]
82 fn test_byte_size_usize() {
83 assert_eq!(1.bytes(), 1);
84 assert_eq!(1.kb(), 1024);
85 assert_eq!(1.mb(), 1024 * 1024);
86 assert_eq!(1.gb(), 1024 * 1024 * 1024);
87
88 assert_eq!(50.mb(), 50 * 1024 * 1024);
89 assert_eq!(512.kb(), 512 * 1024);
90 }
91
92 #[test]
93 fn test_byte_size_u64() {
94 assert_eq!(1u64.kb(), 1024);
95 assert_eq!(50u64.mb(), 50 * 1024 * 1024);
96 }
97
98 #[test]
99 fn test_byte_size_i32() {
100 assert_eq!(1i32.kb(), 1024);
101 assert_eq!(50i32.mb(), 50 * 1024 * 1024);
102 }
103}