@@ -5,13 +5,9 @@ macro_rules! generate_read_fn {
5
5
( $fn_name: ident, $data_type: ty, $byte_type: ty, $type_size: expr, $endian_type: ident) => {
6
6
/// Read bytes from the slice
7
7
pub fn $fn_name( input: & [ $byte_type] ) -> $data_type {
8
- assert!( $type_size == std:: mem:: size_of:: <$data_type>( ) ) ;
9
- let mut array = [ 0u8 ; $type_size] ;
10
- #[ allow( clippy:: cast_sign_loss) ]
11
- #[ allow( clippy:: cast_possible_wrap) ]
12
- for ( byte, read) in array. iter_mut( ) . zip( input. iter( ) . cloned( ) ) {
13
- * byte = read as u8 ;
14
- }
8
+ let mut array = [ 0u8 ; std:: mem:: size_of:: <$data_type>( ) ] ;
9
+ let how_many = input. len( ) . min( std:: mem:: size_of:: <$data_type>( ) ) ;
10
+ array[ ..how_many] . copy_from_slice( & input[ ..how_many] ) ;
15
11
<$data_type>:: $endian_type( array)
16
12
}
17
13
} ;
@@ -21,32 +17,21 @@ macro_rules! generate_write_fn {
21
17
( $fn_name: ident, $data_type: ty, $byte_type: ty, $endian_type: ident) => {
22
18
/// Write bytes to the slice
23
19
pub fn $fn_name( buf: & mut [ $byte_type] , n: $data_type) {
24
- #[ allow( clippy:: cast_sign_loss) ]
25
- #[ allow( clippy:: cast_possible_wrap) ]
26
- for ( byte, read) in buf
27
- . iter_mut( )
28
- . zip( <$data_type>:: $endian_type( n) . iter( ) . cloned( ) )
29
- {
30
- * byte = read as $byte_type;
31
- }
20
+ let bytes = n. $endian_type( ) ;
21
+ let how_much = buf. len( ) . min( bytes. len( ) ) ;
22
+ buf[ ..how_much] . copy_from_slice( & bytes[ ..how_much] ) ;
32
23
}
33
24
} ;
34
25
}
35
26
36
- generate_read_fn ! ( read_le_u16, u16 , u8 , 2 , from_le_bytes) ;
37
27
generate_read_fn ! ( read_le_u32, u32 , u8 , 4 , from_le_bytes) ;
38
- generate_read_fn ! ( read_le_u32_from_i8, u32 , i8 , 4 , from_le_bytes) ;
39
28
generate_read_fn ! ( read_le_u64, u64 , u8 , 8 , from_le_bytes) ;
40
- generate_read_fn ! ( read_le_i32, i32 , i8 , 4 , from_le_bytes) ;
41
29
42
30
generate_read_fn ! ( read_be_u16, u16 , u8 , 2 , from_be_bytes) ;
43
31
generate_read_fn ! ( read_be_u32, u32 , u8 , 4 , from_be_bytes) ;
44
32
45
- generate_write_fn ! ( write_le_u16, u16 , u8 , to_le_bytes) ;
46
33
generate_write_fn ! ( write_le_u32, u32 , u8 , to_le_bytes) ;
47
- generate_write_fn ! ( write_le_u32_to_i8, u32 , i8 , to_le_bytes) ;
48
34
generate_write_fn ! ( write_le_u64, u64 , u8 , to_le_bytes) ;
49
- generate_write_fn ! ( write_le_i32, i32 , i8 , to_le_bytes) ;
50
35
51
36
generate_write_fn ! ( write_be_u16, u16 , u8 , to_be_bytes) ;
52
37
generate_write_fn ! ( write_be_u32, u32 , u8 , to_be_bytes) ;
@@ -110,10 +95,8 @@ mod tests {
110
95
} ;
111
96
}
112
97
113
- byte_order_test_read_write ! ( test_le_u16, write_le_u16, read_le_u16, false , u16 ) ;
114
98
byte_order_test_read_write ! ( test_le_u32, write_le_u32, read_le_u32, false , u32 ) ;
115
99
byte_order_test_read_write ! ( test_le_u64, write_le_u64, read_le_u64, false , u64 ) ;
116
- byte_order_test_read_write ! ( test_le_i32, write_le_i32, read_le_i32, false , i32 ) ;
117
100
byte_order_test_read_write ! ( test_be_u16, write_be_u16, read_be_u16, true , u16 ) ;
118
101
byte_order_test_read_write ! ( test_be_u32, write_be_u32, read_be_u32, true , u32 ) ;
119
102
}
0 commit comments