1pub trait Size {
5 const SIZE: usize;
7}
8
9impl Size for u8 {
10 const SIZE: usize = 1;
11}
12
13impl Size for u16 {
14 const SIZE: usize = 2;
15}
16
17impl Size for u32 {
18 const SIZE: usize = 4;
19}
20
21impl Size for u64 {
22 const SIZE: usize = 8;
23}
24
25impl Size for i8 {
26 const SIZE: usize = 1;
27}
28
29impl Size for i16 {
30 const SIZE: usize = 2;
31}
32
33impl Size for i32 {
34 const SIZE: usize = 4;
35}
36
37impl Size for i64 {
38 const SIZE: usize = 8;
39}
40
41impl Size for f32 {
42 const SIZE: usize = 4;
43}
44
45impl Size for f64 {
46 const SIZE: usize = 8;
47}
48
49impl Size for bool {
50 const SIZE: usize = 1;
51}
52
53impl Size for char {
54 const SIZE: usize = 4;
55}
56
57impl Size for () {
58 const SIZE: usize = 0;
59}
60
61impl<T1> Size for (T1,) where T1: Size {
64 const SIZE: usize = T1::SIZE;
65}
66
67impl<T1, T2> Size for (T1, T2) where T1: Size, T2: Size {
68 const SIZE: usize = T1::SIZE + T2::SIZE;
69}
70
71impl<T1, T2, T3> Size for (T1, T2, T3) where T1: Size, T2: Size, T3: Size {
72 const SIZE: usize = T1::SIZE + T2::SIZE + T3::SIZE;
73}
74
75impl<T1, T2, T3, T4> Size for (T1, T2, T3, T4) where T1: Size, T2: Size, T3: Size, T4: Size {
76 const SIZE: usize = T1::SIZE + T2::SIZE + T3::SIZE + T4::SIZE;
77}
78
79impl<T> Size for &T where T: Size {
80 const SIZE: usize = T::SIZE;
81}
82
83impl<T> Size for &mut T where T: Size {
84 const SIZE: usize = T::SIZE;
85}
86
87impl<T> Size for Option<T> where T: Size {
88 const SIZE: usize = T::SIZE + 1;
89}
90
91impl<T, const N: usize> Size for [T; N] where T: Size {
92 const SIZE: usize = T::SIZE * N;
93}