Add rust lint CI job.
Some checks failed
Check / Check Rust (pull_request) Failing after 2s

This commit is contained in:
Drew 2025-12-13 23:16:33 -08:00
parent 311755c812
commit c6b1893bb0
30 changed files with 181 additions and 108 deletions

View file

@ -5,12 +5,19 @@ pub struct ByteBuffer<const N: usize> {
buffer: Box<[u8; N]>,
}
impl<const N: usize> ByteBuffer<N> {
pub fn new() -> Self {
impl<const N: usize> Default for ByteBuffer<N> {
fn default() -> Self {
Self {
buffer: Box::new([0; N]),
}
}
}
impl<const N: usize> ByteBuffer<N> {
pub fn new() -> Self {
ByteBuffer::default()
}
pub fn size(&self) -> u64 {
N as u64
}
@ -54,7 +61,7 @@ impl<const N: usize> ByteBuffer<N> {
if (len + offset) > N {
return Err(ZError::BUFFER_SIZE);
}
Ok(alloc::str::from_utf8(&self.buffer[offset..offset + len])
.map_err(|_| ZError::INVALID_ARGUMENT)?)
alloc::str::from_utf8(&self.buffer[offset..offset + len])
.map_err(|_| ZError::INVALID_ARGUMENT)
}
}

View file

@ -34,5 +34,5 @@ pub fn call_endpoint<Req: YunqMessage, Resp: YunqMessage, const N: usize>(
return Err(ZError::from(resp_code));
}
Ok(Resp::parse_from_request(&byte_buffer, &cap_buffer)?)
Resp::parse_from_request(byte_buffer, &cap_buffer)
}

View file

@ -28,7 +28,7 @@ pub fn parse_repeated_message<T: YunqMessage, const N: usize>(
buf: &ByteBuffer<N>,
mut offset: usize,
len: usize,
caps: &Vec<z_cap_t>,
caps: &[z_cap_t],
) -> Result<Vec<T>, ZError> {
let mut repeated = Vec::new();
for _ in 0..len {
@ -43,18 +43,18 @@ pub fn parse_repeated_message<T: YunqMessage, const N: usize>(
pub fn serialize_repeated<T: Copy, const N: usize>(
buf: &mut ByteBuffer<N>,
offset: usize,
data: &Vec<T>,
data: &[T],
) -> Result<usize, ZError> {
for i in 0..data.len() {
buf.write_at(offset + (i * size_of::<T>()), data[i])?;
for (i, val) in data.iter().enumerate() {
buf.write_at(offset + (i * size_of::<T>()), val)?;
}
Ok(offset + (data.len() * size_of::<T>()))
Ok(offset + size_of_val(data))
}
pub fn serialize_repeated_message<T: YunqMessage, const N: usize>(
buf: &mut ByteBuffer<N>,
mut offset: usize,
data: &Vec<T>,
data: &[T],
caps: &mut Vec<z_cap_t>,
) -> Result<usize, ZError> {
for item in data {
@ -76,14 +76,14 @@ pub trait YunqMessage {
fn parse<const N: usize>(
buf: &ByteBuffer<N>,
offset: usize,
caps: &Vec<z_cap_t>,
caps: &[z_cap_t],
) -> Result<Self, ZError>
where
Self: Sized;
fn parse_from_request<const N: usize>(
buf: &ByteBuffer<N>,
caps: &Vec<z_cap_t>,
caps: &[z_cap_t],
) -> Result<Self, ZError>
where
Self: Sized,
@ -92,7 +92,7 @@ pub trait YunqMessage {
return Err(ZError::INVALID_RESPONSE);
}
Ok(Self::parse(&buf, 16, &caps)?)
Self::parse(buf, 16, caps)
}
fn serialize<const N: usize>(
@ -109,7 +109,7 @@ pub trait YunqMessage {
caps: &mut Vec<z_cap_t>,
) -> Result<usize, ZError> {
buf.write_at(0, SENTINEL)?;
buf.write_at(8, request_id as u64)?;
buf.write_at(8, request_id)?;
let length = self.serialize(buf, 16, caps)?;
@ -125,7 +125,7 @@ impl YunqMessage for Empty {
fn parse<const N: usize>(
_buf: &ByteBuffer<N>,
_offset: usize,
_caps: &Vec<z_cap_t>,
_caps: &[z_cap_t],
) -> Result<Self, ZError>
where
Self: Sized,

View file

@ -37,7 +37,7 @@ pub trait YunqServer {
.expect("Failed to reply"),
Err(err) => {
crate::message::serialize_error(&mut byte_buffer, err);
syscall::reply_port_send(reply_port_cap, &byte_buffer.slice(0x10), &[])
syscall::reply_port_send(reply_port_cap, byte_buffer.slice(0x10), &[])
.expect("Failed to reply w/ error")
}
}
@ -84,11 +84,11 @@ where
.at::<u64>(8)
.expect("Failed to access request length.");
let self_clone = self.clone();
spawner.spawn(Task::new((async move || {
spawner.spawn(Task::new(async move {
self_clone
.handle_request_and_response(method, byte_buffer, cap_buffer, reply_port_cap)
.await;
})()));
.await
}));
}
}
@ -113,12 +113,10 @@ where
.expect("Failed to reply"),
Err(err) => {
crate::message::serialize_error(&mut byte_buffer, err);
syscall::reply_port_send(reply_port_cap, &byte_buffer.slice(0x10), &[])
syscall::reply_port_send(reply_port_cap, byte_buffer.slice(0x10), &[])
.expect("Failed to reply w/ error")
}
}
()
}
}