1pub fn remove_trailing_zeroes(data: &[u8]) -> usize {
10 let mut len = data.len();
11
12 for b in data[1..].iter().rev() {
13 if *b != 0 {
14 break;
15 }
16
17 len -= 1;
18 }
19
20 len
21}
22
23pub trait RustDefault: Copy {
30 fn rust_default() -> Self;
31}
32
33impl<T: RustDefault, const N: usize> RustDefault for [T; N] {
34 #[inline(always)]
35 fn rust_default() -> Self {
36 let val: T = RustDefault::rust_default();
37 [val; N]
38 }
39}
40
41impl RustDefault for u8 {
42 #[inline(always)]
43 fn rust_default() -> Self {
44 0
45 }
46}
47
48impl RustDefault for i8 {
49 #[inline(always)]
50 fn rust_default() -> Self {
51 0
52 }
53}
54
55impl RustDefault for u16 {
56 #[inline(always)]
57 fn rust_default() -> Self {
58 0
59 }
60}
61
62impl RustDefault for i16 {
63 #[inline(always)]
64 fn rust_default() -> Self {
65 0
66 }
67}
68
69impl RustDefault for u32 {
70 #[inline(always)]
71 fn rust_default() -> Self {
72 0
73 }
74}
75
76impl RustDefault for i32 {
77 #[inline(always)]
78 fn rust_default() -> Self {
79 0
80 }
81}
82
83impl RustDefault for u64 {
84 #[inline(always)]
85 fn rust_default() -> Self {
86 0
87 }
88}
89
90impl RustDefault for i64 {
91 #[inline(always)]
92 fn rust_default() -> Self {
93 0
94 }
95}
96
97impl RustDefault for char {
98 #[inline(always)]
99 fn rust_default() -> Self {
100 '\0'
101 }
102}
103
104impl RustDefault for f32 {
105 #[inline(always)]
106 fn rust_default() -> Self {
107 0.0
108 }
109}
110
111impl RustDefault for f64 {
112 #[inline(always)]
113 fn rust_default() -> Self {
114 0.0
115 }
116}