pub struct SafeBytesSlice<'a> { /* private fields */ }
Expand description
Non panic wrapper for &mut [u8]
that implement BufMut
trait.
§Example
§work with uninitialized memory &mut [MaybeUninit<u8>]
use bytes::buf::BufMut;
use static_bytes::SafeBytesSlice;
use core::mem::MaybeUninit;
//are you sure that's random?
fn fill_with_random(buf: &mut dyn BufMut, amount: usize) {
for _ in 0..amount {
buf.put_u8(9);
}
}
// This is optimized way of working with slices
// This is safe. See way in rust doc:
// https://doc.rust-lang.org/std/mem/union.MaybeUninit.html#initializing-an-array-element-by-element
let mut fixed_storage: [MaybeUninit<u8>; 128] = unsafe {
MaybeUninit::uninit().assume_init()
};
let mut slice = SafeBytesSlice::from(&mut fixed_storage[..]);
// your function that accept `&mut dyn BufMut`
fill_with_random(&mut slice, 32);
let output = slice.try_into_bytes().unwrap();
assert_eq!(output.len(), 32);
assert_eq!(output[31], 9);
§work with standard slice &mut [u8]
use bytes::buf::BufMut;
use static_bytes::SafeBytesSlice;
let mut fixed_storage = [0u8; 64];
let mut slice = SafeBytesSlice::from(&mut fixed_storage[..]);
// your function that accept `&mut dyn BufMut`
// see function impl in `&mut [MaybeUninit<u8>]` example
fill_with_random(&mut slice, 32);
let output = slice.try_into_bytes().unwrap();
assert_eq!(output.len(), 32);
assert_eq!(output[31], 9);
Is fill_with_random()
random?
Implementations§
Source§impl<'a> SafeBytesSlice<'a>
impl<'a> SafeBytesSlice<'a>
Sourcepub fn try_into_bytes(self) -> Result<&'a [u8], CapacityExceeded>
pub fn try_into_bytes(self) -> Result<&'a [u8], CapacityExceeded>
Returns filled bytes (&[u8]
) or error if capacity exceeded.
Trait Implementations§
Source§impl<'a> BufMut for SafeBytesSlice<'a>
impl<'a> BufMut for SafeBytesSlice<'a>
Source§fn remaining_mut(&self) -> usize
fn remaining_mut(&self) -> usize
Returns the number of bytes that can be written from the current
position until the end of the buffer is reached. Read more
Source§unsafe fn advance_mut(&mut self, cnt: usize)
unsafe fn advance_mut(&mut self, cnt: usize)
Advance the internal cursor of the BufMut Read more
Source§fn chunk_mut(&mut self) -> &mut UninitSlice
fn chunk_mut(&mut self) -> &mut UninitSlice
Returns a mutable slice starting at the current BufMut position and of
length between 0 and
BufMut::remaining_mut()
. Note that this can be shorter than the
whole remainder of the buffer (this allows non-continuous implementation). Read moreSource§fn has_remaining_mut(&self) -> bool
fn has_remaining_mut(&self) -> bool
Returns true if there is space in
self
for more bytes. Read moreSource§fn put_u16(&mut self, n: u16)
fn put_u16(&mut self, n: u16)
Writes an unsigned 16 bit integer to
self
in big-endian byte order. Read moreSource§fn put_u16_le(&mut self, n: u16)
fn put_u16_le(&mut self, n: u16)
Writes an unsigned 16 bit integer to
self
in little-endian byte order. Read moreSource§fn put_u16_ne(&mut self, n: u16)
fn put_u16_ne(&mut self, n: u16)
Writes an unsigned 16 bit integer to
self
in native-endian byte order. Read moreSource§fn put_i16(&mut self, n: i16)
fn put_i16(&mut self, n: i16)
Writes a signed 16 bit integer to
self
in big-endian byte order. Read moreSource§fn put_i16_le(&mut self, n: i16)
fn put_i16_le(&mut self, n: i16)
Writes a signed 16 bit integer to
self
in little-endian byte order. Read moreSource§fn put_i16_ne(&mut self, n: i16)
fn put_i16_ne(&mut self, n: i16)
Writes a signed 16 bit integer to
self
in native-endian byte order. Read moreSource§fn put_u32(&mut self, n: u32)
fn put_u32(&mut self, n: u32)
Writes an unsigned 32 bit integer to
self
in big-endian byte order. Read moreSource§fn put_u32_le(&mut self, n: u32)
fn put_u32_le(&mut self, n: u32)
Writes an unsigned 32 bit integer to
self
in little-endian byte order. Read moreSource§fn put_u32_ne(&mut self, n: u32)
fn put_u32_ne(&mut self, n: u32)
Writes an unsigned 32 bit integer to
self
in native-endian byte order. Read moreSource§fn put_i32(&mut self, n: i32)
fn put_i32(&mut self, n: i32)
Writes a signed 32 bit integer to
self
in big-endian byte order. Read moreSource§fn put_i32_le(&mut self, n: i32)
fn put_i32_le(&mut self, n: i32)
Writes a signed 32 bit integer to
self
in little-endian byte order. Read moreSource§fn put_i32_ne(&mut self, n: i32)
fn put_i32_ne(&mut self, n: i32)
Writes a signed 32 bit integer to
self
in native-endian byte order. Read moreSource§fn put_u64(&mut self, n: u64)
fn put_u64(&mut self, n: u64)
Writes an unsigned 64 bit integer to
self
in the big-endian byte order. Read moreSource§fn put_u64_le(&mut self, n: u64)
fn put_u64_le(&mut self, n: u64)
Writes an unsigned 64 bit integer to
self
in little-endian byte order. Read moreSource§fn put_u64_ne(&mut self, n: u64)
fn put_u64_ne(&mut self, n: u64)
Writes an unsigned 64 bit integer to
self
in native-endian byte order. Read moreSource§fn put_i64(&mut self, n: i64)
fn put_i64(&mut self, n: i64)
Writes a signed 64 bit integer to
self
in the big-endian byte order. Read moreSource§fn put_i64_le(&mut self, n: i64)
fn put_i64_le(&mut self, n: i64)
Writes a signed 64 bit integer to
self
in little-endian byte order. Read moreSource§fn put_i64_ne(&mut self, n: i64)
fn put_i64_ne(&mut self, n: i64)
Writes a signed 64 bit integer to
self
in native-endian byte order. Read moreSource§fn put_u128(&mut self, n: u128)
fn put_u128(&mut self, n: u128)
Writes an unsigned 128 bit integer to
self
in the big-endian byte order. Read moreSource§fn put_u128_le(&mut self, n: u128)
fn put_u128_le(&mut self, n: u128)
Writes an unsigned 128 bit integer to
self
in little-endian byte order. Read moreSource§fn put_u128_ne(&mut self, n: u128)
fn put_u128_ne(&mut self, n: u128)
Writes an unsigned 128 bit integer to
self
in native-endian byte order. Read moreSource§fn put_i128(&mut self, n: i128)
fn put_i128(&mut self, n: i128)
Writes a signed 128 bit integer to
self
in the big-endian byte order. Read moreSource§fn put_i128_le(&mut self, n: i128)
fn put_i128_le(&mut self, n: i128)
Writes a signed 128 bit integer to
self
in little-endian byte order. Read moreSource§fn put_i128_ne(&mut self, n: i128)
fn put_i128_ne(&mut self, n: i128)
Writes a signed 128 bit integer to
self
in native-endian byte order. Read moreSource§fn put_uint(&mut self, n: u64, nbytes: usize)
fn put_uint(&mut self, n: u64, nbytes: usize)
Writes an unsigned n-byte integer to
self
in big-endian byte order. Read moreSource§fn put_uint_le(&mut self, n: u64, nbytes: usize)
fn put_uint_le(&mut self, n: u64, nbytes: usize)
Writes an unsigned n-byte integer to
self
in the little-endian byte order. Read moreSource§fn put_uint_ne(&mut self, n: u64, nbytes: usize)
fn put_uint_ne(&mut self, n: u64, nbytes: usize)
Writes an unsigned n-byte integer to
self
in the native-endian byte order. Read moreSource§fn put_int_le(&mut self, n: i64, nbytes: usize)
fn put_int_le(&mut self, n: i64, nbytes: usize)
Source§fn put_int_ne(&mut self, n: i64, nbytes: usize)
fn put_int_ne(&mut self, n: i64, nbytes: usize)
Source§fn put_f32(&mut self, n: f32)
fn put_f32(&mut self, n: f32)
Writes an IEEE754 single-precision (4 bytes) floating point number to
self
in big-endian byte order. Read moreSource§fn put_f32_le(&mut self, n: f32)
fn put_f32_le(&mut self, n: f32)
Writes an IEEE754 single-precision (4 bytes) floating point number to
self
in little-endian byte order. Read moreSource§fn put_f32_ne(&mut self, n: f32)
fn put_f32_ne(&mut self, n: f32)
Writes an IEEE754 single-precision (4 bytes) floating point number to
self
in native-endian byte order. Read moreSource§fn put_f64(&mut self, n: f64)
fn put_f64(&mut self, n: f64)
Writes an IEEE754 double-precision (8 bytes) floating point number to
self
in big-endian byte order. Read moreSource§fn put_f64_le(&mut self, n: f64)
fn put_f64_le(&mut self, n: f64)
Writes an IEEE754 double-precision (8 bytes) floating point number to
self
in little-endian byte order. Read moreSource§fn put_f64_ne(&mut self, n: f64)
fn put_f64_ne(&mut self, n: f64)
Writes an IEEE754 double-precision (8 bytes) floating point number to
self
in native-endian byte order. Read moreSource§impl<'a> From<&'a mut [MaybeUninit<u8>]> for SafeBytesSlice<'a>
impl<'a> From<&'a mut [MaybeUninit<u8>]> for SafeBytesSlice<'a>
Source§fn from(slice: &'a mut [MaybeUninit<u8>]) -> Self
fn from(slice: &'a mut [MaybeUninit<u8>]) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl<'a> Freeze for SafeBytesSlice<'a>
impl<'a> RefUnwindSafe for SafeBytesSlice<'a>
impl<'a> Send for SafeBytesSlice<'a>
impl<'a> Sync for SafeBytesSlice<'a>
impl<'a> Unpin for SafeBytesSlice<'a>
impl<'a> !UnwindSafe for SafeBytesSlice<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more