harmos_domain/message/
allocation.rs1use super::MessageError;
24
25pub fn add(left: usize, right: usize) -> Result<usize, MessageError> {
42 left.checked_add(right).ok_or_else(|| MessageError::borrowed("decoding memory bound overflow"))
43}
44
45pub fn multiply(left: usize, right: usize) -> Result<usize, MessageError> {
46 left.checked_mul(right).ok_or_else(|| MessageError::borrowed("decoding memory bound overflow"))
47}
48
49#[allow(unsafe_code, reason = "transfer the fixed boxed allocation to the original decoder vector")]
50pub fn vector<T>(capacity: usize) -> Result<Vec<T>, MessageError> {
51 std::alloc::Layout::array::<T>(capacity).map_err(|_| MessageError::borrowed("decoding container exceeds address space"))?;
52 let allocation = Box::<[T]>::new_uninit_slice(capacity);
53 let pointer = Box::into_raw(allocation) as *mut std::mem::MaybeUninit<T> as *mut T;
54 Ok(unsafe { Vec::from_raw_parts(pointer, 0, capacity) })
58}
59
60