File tree Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Original file line number Diff line number Diff line change @@ -42,6 +42,7 @@ mpmc_large = []
42
42
nightly = []
43
43
44
44
[dependencies ]
45
+ bytes = { version = " 1" , default-features = false , optional = true }
45
46
portable-atomic = { version = " 1.0" , optional = true }
46
47
hash32 = " 0.3.0"
47
48
serde = { version = " 1" , optional = true , default-features = false }
@@ -58,6 +59,7 @@ static_assertions = "1.1.0"
58
59
59
60
[package .metadata .docs .rs ]
60
61
features = [
62
+ " bytes" ,
61
63
" ufmt" ,
62
64
" serde" ,
63
65
" defmt" ,
Original file line number Diff line number Diff line change
1
+ //! Bytes implementations for heapless types
2
+
3
+ use crate :: Vec ;
4
+ use bytes:: buf:: UninitSlice ;
5
+ use bytes:: BufMut ;
6
+
7
+ unsafe impl < const N : usize > BufMut for Vec < u8 , N > {
8
+ #[ inline]
9
+ fn remaining_mut ( & self ) -> usize {
10
+ N - self . len ( )
11
+ }
12
+
13
+ #[ inline]
14
+ unsafe fn advance_mut ( & mut self , cnt : usize ) {
15
+ let len = self . len ( ) ;
16
+ let pos = len + cnt;
17
+ if pos >= N {
18
+ panic ! ( "Advance out of range" ) ;
19
+ }
20
+ self . set_len ( pos) ;
21
+ }
22
+
23
+ #[ inline]
24
+ fn chunk_mut ( & mut self ) -> & mut UninitSlice {
25
+ let len = self . len ( ) ;
26
+ let ptr = self . as_mut_ptr ( ) ;
27
+ unsafe { & mut UninitSlice :: from_raw_parts_mut ( ptr, N ) [ len..] }
28
+ }
29
+ }
30
+
31
+ #[ cfg( test) ]
32
+ mod tests {
33
+ use crate :: Vec ;
34
+ use bytes:: BufMut ;
35
+
36
+ #[ test]
37
+ #[ should_panic]
38
+ fn advance_out_of_bound ( ) {
39
+ let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
40
+ unsafe { vec. advance_mut ( 9 ) } ;
41
+ }
42
+
43
+ #[ test]
44
+ fn remaining_mut ( ) {
45
+ let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
46
+ assert_eq ! ( vec. remaining_mut( ) , 8 ) ;
47
+ vec. push ( 42 ) . unwrap ( ) ;
48
+ assert_eq ! ( vec. remaining_mut( ) , 7 ) ;
49
+ }
50
+
51
+ #[ test]
52
+ fn chunk_mut ( ) {
53
+ let mut vec: Vec < u8 , 8 > = Vec :: new ( ) ;
54
+ assert_eq ! ( vec. chunk_mut( ) . len( ) , 8 ) ;
55
+ unsafe { vec. advance_mut ( 1 ) } ;
56
+ assert_eq ! ( vec. chunk_mut( ) . len( ) , 7 ) ;
57
+ }
58
+ }
Original file line number Diff line number Diff line change @@ -192,6 +192,8 @@ mod de;
192
192
mod ser;
193
193
194
194
pub mod binary_heap;
195
+ #[ cfg( feature = "bytes" ) ]
196
+ mod bytes;
195
197
#[ cfg( feature = "defmt" ) ]
196
198
mod defmt;
197
199
#[ cfg( any(
You can’t perform that action at this time.
0 commit comments