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