commonware_utils/
stable_buf_mut.rs1use crate::stable_buf::StableBuf;
6
7pub unsafe trait StableBufMut: StableBuf {
12 fn stable_mut_ptr(&mut self) -> *mut u8;
14
15 fn put_slice(&mut self, src: &[u8]) {
19 let dst = self.stable_mut_ptr();
20 unsafe {
21 std::ptr::copy_nonoverlapping(src.as_ptr(), dst, src.len());
22 }
23 }
24
25 fn deref_mut(&mut self) -> &mut [u8] {
27 unsafe { std::slice::from_raw_parts_mut(self.stable_mut_ptr(), self.len()) }
28 }
29}
30
31unsafe impl StableBufMut for Vec<u8> {
32 fn stable_mut_ptr(&mut self) -> *mut u8 {
33 self.as_mut_ptr()
34 }
35}
36
37unsafe impl StableBufMut for bytes::BytesMut {
38 fn stable_mut_ptr(&mut self) -> *mut u8 {
39 self.as_mut_ptr()
40 }
41}