Skip to content

Commit fa7694a

Browse files
committed
remove slice coercion
1 parent dcf30ff commit fa7694a

File tree

2 files changed

+135
-104
lines changed

2 files changed

+135
-104
lines changed

src/lib.rs

Lines changed: 31 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use core::{
2626
ops::{Deref, DerefMut},
2727
};
2828

29-
pub use slice::BufferExt;
29+
pub use slice::{ReadBufferExt, ReadBufferSlice, WriteBufferExt, WriteBufferSlice};
3030

3131
use stable_deref_trait::StableDeref;
3232

@@ -204,7 +204,6 @@ unsafe impl<T: WriteTarget> WriteTarget for MaybeUninit<T> {
204204
#[cfg(test)]
205205
mod tests {
206206
use super::*;
207-
use crate::slice::BufferExt;
208207
use core::any::Any;
209208

210209
fn api_read<W, B>(buffer: B) -> (*const W, usize)
@@ -236,122 +235,118 @@ mod tests {
236235
const SIZE: usize = 128;
237236
static BUF: [u8; SIZE] = [0u8; SIZE];
238237
{
239-
let buf_slice = (&BUF).into_buffer_slice(..123);
238+
let buf_slice = (&BUF).into_read_buffer_slice(..123).unwrap();
240239
let (ptr, size_local) = api_read(buf_slice);
241240
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
242241
assert_eq!(size_local, 123);
243242
}
244243

245244
{
246-
let buf_slice = (&BUF).into_buffer_slice(5..123);
245+
let buf_slice = (&BUF).into_read_buffer_slice(5..123).unwrap();
247246
let (ptr, size_local) = api_read(buf_slice);
248247
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
249248
assert_eq!(size_local, 123 - 5);
250249
}
251250

252251
{
253-
let buf_slice = (&BUF).into_buffer_slice(5..);
252+
let buf_slice = (&BUF).into_read_buffer_slice(5..).unwrap();
254253
let (ptr, size_local) = api_read(buf_slice);
255254
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
256255
assert_eq!(size_local, SIZE - 5);
257256
}
258257

259258
{
260-
let buf_slice = (&BUF).into_buffer_slice(..);
259+
let buf_slice = (&BUF).into_read_buffer_slice(..).unwrap();
261260
let (ptr, size_local) = api_read(buf_slice);
262261
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
263262
assert_eq!(size_local, SIZE);
264263
}
265264

266265
{
267-
let buf_slice = (&BUF).into_buffer_slice(0..SIZE);
266+
let buf_slice = (&BUF).into_read_buffer_slice(0..SIZE).unwrap();
268267
let (ptr, size_local) = api_read(buf_slice);
269268
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
270269
assert_eq!(size_local, SIZE);
271270
}
272271

273272
{
274-
let buf_slice = (&BUF).into_buffer_slice(0..9999999999);
275-
let (ptr, size_local) = api_read(buf_slice);
276-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
277-
assert_eq!(size_local, SIZE);
273+
let buf_slice = (&BUF).into_read_buffer_slice(0..9999999999);
274+
assert!(buf_slice.is_none());
278275
}
279276

280277
{
281-
let buf_slice = (&BUF).into_buffer_slice(123213..9999999999);
282-
let (ptr, size_local) = api_read(buf_slice);
283-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
284-
assert_eq!(size_local, 0);
278+
let buf_slice = (&BUF).into_read_buffer_slice(123213..9999999999);
279+
assert!(buf_slice.is_none());
285280
}
286281

287282
{
288283
#[allow(clippy::reversed_empty_ranges)]
289-
let buf_slice = (&BUF).into_buffer_slice(123..2);
290-
let (ptr, size_local) = api_read(buf_slice);
291-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
292-
assert_eq!(size_local, 0);
284+
let buf_slice = (&BUF).into_read_buffer_slice(123..2);
285+
assert!(buf_slice.is_none());
293286
}
294287
}
295288

296289
#[test]
297290
fn write_api_slice() {
291+
pub use slice::WriteBufferExt;
292+
298293
const SIZE: usize = 128;
299294
static mut BUF: [u8; SIZE] = [0u8; SIZE];
300295
{
301-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(..123);
296+
let buf_slice = (unsafe { &mut BUF })
297+
.into_write_buffer_slice(..123)
298+
.unwrap();
302299
let (ptr, size_local) = api_write(buf_slice);
303300
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
304301
assert_eq!(size_local, 123);
305302
}
306303

307304
{
308-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(5..123);
305+
let buf_slice = (unsafe { &mut BUF })
306+
.into_write_buffer_slice(5..123)
307+
.unwrap();
309308
let (ptr, size_local) = api_write(buf_slice);
310309
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
311310
assert_eq!(size_local, 123 - 5);
312311
}
313312

314313
{
315-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(5..);
314+
let buf_slice = (unsafe { &mut BUF }).into_write_buffer_slice(5..).unwrap();
316315
let (ptr, size_local) = api_write(buf_slice);
317316
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
318317
assert_eq!(size_local, SIZE - 5);
319318
}
320319

321320
{
322-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(..);
321+
let buf_slice = (unsafe { &mut BUF }).into_write_buffer_slice(..).unwrap();
323322
let (ptr, size_local) = api_write(buf_slice);
324323
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
325324
assert_eq!(size_local, SIZE);
326325
}
327326

328327
{
329-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(0..SIZE);
328+
let buf_slice = (unsafe { &mut BUF })
329+
.into_write_buffer_slice(0..SIZE)
330+
.unwrap();
330331
let (ptr, size_local) = api_write(buf_slice);
331332
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
332333
assert_eq!(size_local, SIZE);
333334
}
334335

335336
{
336-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(0..9999999999);
337-
let (ptr, size_local) = api_write(buf_slice);
338-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
339-
assert_eq!(size_local, SIZE);
337+
let buf_slice = (unsafe { &mut BUF }).into_write_buffer_slice(0..9999999999);
338+
assert!(buf_slice.is_none());
340339
}
341340

342341
{
343-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(123213..9999999999);
344-
let (ptr, size_local) = api_write(buf_slice);
345-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
346-
assert_eq!(size_local, 0);
342+
let buf_slice = (unsafe { &mut BUF }).into_write_buffer_slice(123213..9999999999);
343+
assert!(buf_slice.is_none());
347344
}
348345

349346
{
350347
#[allow(clippy::reversed_empty_ranges)]
351-
let buf_slice = (unsafe { &mut BUF }).into_buffer_slice(123..2);
352-
let (ptr, size_local) = api_write(buf_slice);
353-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
354-
assert_eq!(size_local, 0);
348+
let buf_slice = (unsafe { &mut BUF }).into_write_buffer_slice(123..2);
349+
assert!(buf_slice.is_none())
355350
}
356351
}
357352

0 commit comments

Comments
 (0)