Skip to content

Commit 0cf983d

Browse files
committed
use AsRef instead of Deref in NoAllocBufferSegments
1 parent 857b324 commit 0cf983d

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

capnp/src/serialize/no_alloc_buffer_segments.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::message::ReaderOptions;
44
use crate::message::ReaderSegments;
55
use crate::private::units::BYTES_PER_WORD;
66
use crate::{Error, ErrorKind, Result};
7-
use core::ops::Deref;
87

98
use super::SEGMENTS_COUNT_LIMIT;
109

@@ -147,19 +146,19 @@ impl<'b> NoAllocBufferSegments<&'b [u8]> {
147146
}
148147
}
149148

150-
impl<T: Deref<Target = [u8]>> NoAllocBufferSegments<T> {
149+
impl<T: AsRef<[u8]>> NoAllocBufferSegments<T> {
151150
/// Reads a serialized message (including a segment table) from a buffer and takes ownership, without copying.
152151
/// The buffer is allowed to extend beyond the end of the message.
153152
///
154153
/// ALIGNMENT: If the "unaligned" feature is enabled, then there are no alignment requirements on `buffer`.
155154
/// Otherwise, `buffer` must be 8-byte aligned (attempts to read the message will trigger errors).
156155
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)?;
158157
Ok(Self::from_segment_table(buffer, segment_table_info))
159158
}
160159
}
161160

162-
impl<T: Deref<Target = [u8]>> ReaderSegments for NoAllocBufferSegments<T> {
161+
impl<T: AsRef<[u8]>> ReaderSegments for NoAllocBufferSegments<T> {
163162
fn get_segment(&self, idx: u32) -> Option<&[u8]> {
164163
// panic safety: we are doing a lot of `unwrap` here. We assume that underlying message slice
165164
// 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> {
170169
match self.segment_type {
171170
NoAllocBufferSegmentType::SingleSegment(start, end) => {
172171
if idx == 0 {
173-
Some(&self.buffer[start..end])
172+
Some(&self.buffer.as_ref()[start..end])
174173
} else {
175174
None
176175
}
177176
}
178177
NoAllocBufferSegmentType::MultipleSegments => {
179-
let mut buf = &*self.buffer;
178+
let mut buf = self.buffer.as_ref();
180179

181180
let segments_count = u32_to_segments_count(read_u32_le(&mut buf).unwrap()).unwrap();
182181

@@ -197,7 +196,7 @@ impl<T: Deref<Target = [u8]>> ReaderSegments for NoAllocBufferSegments<T> {
197196
let segment_length =
198197
u32_to_segment_length_bytes(read_u32_le(&mut buf).unwrap()).unwrap();
199198

200-
Some(&self.buffer[segment_offset..(segment_offset + segment_length)])
199+
Some(&self.buffer.as_ref()[segment_offset..(segment_offset + segment_length)])
201200
}
202201
}
203202
}
@@ -209,7 +208,7 @@ impl<T: Deref<Target = [u8]>> ReaderSegments for NoAllocBufferSegments<T> {
209208
match self.segment_type {
210209
NoAllocBufferSegmentType::SingleSegment { .. } => 1,
211210
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()
213212
}
214213
}
215214
}

0 commit comments

Comments
 (0)