use crate::error::{MotorcortexError, Result};
use nng_c_sys::nng_socket;
use std::ffi::c_void;
use std::ptr;
pub fn receive_message(sock: &nng_socket) -> Result<Vec<u8>> {
let mut reply_ptr: *mut c_void = ptr::null_mut();
let mut reply_size: usize = 0;
let rv = unsafe {
nng_c_sys::nng_recv(
*sock,
&mut reply_ptr as *mut _ as *mut c_void,
&mut reply_size,
nng_c_sys::NNG_FLAG_ALLOC,
)
};
if rv != 0 {
return Err(MotorcortexError::Io(format!(
"nng_recv failed with code: {rv}"
)));
}
let vec = unsafe {
let slice = std::slice::from_raw_parts(reply_ptr as *const u8, reply_size);
let vec = slice.to_vec();
nng_c_sys::nng_free(reply_ptr, reply_size);
vec
};
Ok(vec)
}