@@ -4,7 +4,6 @@ use crate::message::ReaderOptions;
4
4
use crate :: message:: ReaderSegments ;
5
5
use crate :: private:: units:: BYTES_PER_WORD ;
6
6
use crate :: { Error , ErrorKind , Result } ;
7
- use core:: ops:: Deref ;
8
7
9
8
use super :: SEGMENTS_COUNT_LIMIT ;
10
9
@@ -147,19 +146,19 @@ impl<'b> NoAllocBufferSegments<&'b [u8]> {
147
146
}
148
147
}
149
148
150
- impl < T : Deref < Target = [ u8 ] > > NoAllocBufferSegments < T > {
149
+ impl < T : AsRef < [ u8 ] > > NoAllocBufferSegments < T > {
151
150
/// Reads a serialized message (including a segment table) from a buffer and takes ownership, without copying.
152
151
/// The buffer is allowed to extend beyond the end of the message.
153
152
///
154
153
/// ALIGNMENT: If the "unaligned" feature is enabled, then there are no alignment requirements on `buffer`.
155
154
/// Otherwise, `buffer` must be 8-byte aligned (attempts to read the message will trigger errors).
156
155
pub fn from_buffer ( buffer : T , options : ReaderOptions ) -> Result < Self > {
157
- let segment_table_info = read_segment_table ( & buffer, options) ?;
156
+ let segment_table_info = read_segment_table ( buffer. as_ref ( ) , options) ?;
158
157
Ok ( Self :: from_segment_table ( buffer, segment_table_info) )
159
158
}
160
159
}
161
160
162
- impl < T : Deref < Target = [ u8 ] > > ReaderSegments for NoAllocBufferSegments < T > {
161
+ impl < T : AsRef < [ u8 ] > > ReaderSegments for NoAllocBufferSegments < T > {
163
162
fn get_segment ( & self , idx : u32 ) -> Option < & [ u8 ] > {
164
163
// panic safety: we are doing a lot of `unwrap` here. We assume that underlying message slice
165
164
// holds valid capnp message - we already verified slice in read_segment_table(),
@@ -170,13 +169,13 @@ impl<T: Deref<Target = [u8]>> ReaderSegments for NoAllocBufferSegments<T> {
170
169
match self . segment_type {
171
170
NoAllocBufferSegmentType :: SingleSegment ( start, end) => {
172
171
if idx == 0 {
173
- Some ( & self . buffer [ start..end] )
172
+ Some ( & self . buffer . as_ref ( ) [ start..end] )
174
173
} else {
175
174
None
176
175
}
177
176
}
178
177
NoAllocBufferSegmentType :: MultipleSegments => {
179
- let mut buf = & * self . buffer ;
178
+ let mut buf = self . buffer . as_ref ( ) ;
180
179
181
180
let segments_count = u32_to_segments_count ( read_u32_le ( & mut buf) . unwrap ( ) ) . unwrap ( ) ;
182
181
@@ -197,7 +196,7 @@ impl<T: Deref<Target = [u8]>> ReaderSegments for NoAllocBufferSegments<T> {
197
196
let segment_length =
198
197
u32_to_segment_length_bytes ( read_u32_le ( & mut buf) . unwrap ( ) ) . unwrap ( ) ;
199
198
200
- Some ( & self . buffer [ segment_offset..( segment_offset + segment_length) ] )
199
+ Some ( & self . buffer . as_ref ( ) [ segment_offset..( segment_offset + segment_length) ] )
201
200
}
202
201
}
203
202
}
@@ -209,7 +208,7 @@ impl<T: Deref<Target = [u8]>> ReaderSegments for NoAllocBufferSegments<T> {
209
208
match self . segment_type {
210
209
NoAllocBufferSegmentType :: SingleSegment { .. } => 1 ,
211
210
NoAllocBufferSegmentType :: MultipleSegments => {
212
- u32_to_segments_count ( read_u32_le ( & mut & * self . buffer ) . unwrap ( ) ) . unwrap ( )
211
+ u32_to_segments_count ( read_u32_le ( & mut self . buffer . as_ref ( ) ) . unwrap ( ) ) . unwrap ( )
213
212
}
214
213
}
215
214
}
0 commit comments