Move request/response serialization to YunqMessage trait.

This commit is contained in:
Drew Galbraith 2024-07-30 15:13:34 -07:00
parent e41f58c714
commit 6ae111dc66
2 changed files with 38 additions and 19 deletions

View file

@ -4,22 +4,14 @@ use alloc::vec::Vec;
use mammoth::zion::z_cap_t;
use mammoth::zion::ZError;
const SENTINEL: u32 = 0xBEEFDEAD;
pub fn call_endpoint<Req: YunqMessage, Resp: YunqMessage, const N: usize>(
request_id: u64,
req: &Req,
byte_buffer: &mut ByteBuffer<N>,
endpoint_cap: z_cap_t,
) -> Result<Resp, ZError> {
byte_buffer.write_at(0, SENTINEL)?;
byte_buffer.write_at(8, request_id as u64)?;
let mut cap_buffer = Vec::new();
let length = req.serialize(byte_buffer, 16, &mut cap_buffer)?;
byte_buffer.write_at(4, (16 + length) as u32)?;
let length = req.serialize_as_request(request_id, byte_buffer, &mut cap_buffer)?;
let reply_port_cap = mammoth::syscall::endpoint_send(
endpoint_cap,
@ -36,14 +28,5 @@ pub fn call_endpoint<Req: YunqMessage, Resp: YunqMessage, const N: usize>(
cap_buffer.as_mut_slice(),
)?;
if byte_buffer.at::<u32>(0)? != SENTINEL {
return Err(ZError::INVALID_RESPONSE);
}
let resp_code: u64 = byte_buffer.at(8)?;
if resp_code != 0 {
return Err(ZError::from(resp_code));
}
Ok(Resp::parse(&byte_buffer, 16, &cap_buffer)?)
Ok(Resp::parse_from_request(&byte_buffer, &cap_buffer)?)
}