This commit is contained in:
parent
311755c812
commit
baa6c1568e
30 changed files with 181 additions and 108 deletions
|
|
@ -122,7 +122,7 @@ fn parse_field(field: &Field) -> TokenStream {
|
|||
let rep_offset = buf.at::<u32>(yunq::message::field_offset(offset, #ind))?;
|
||||
let rep_len = buf.at::<u32>(yunq::message::field_offset(offset, #ind) + 4)?;
|
||||
|
||||
yunq::message::parse_repeated_message(buf, offset + rep_offset as usize, rep_len as usize, &caps)?
|
||||
yunq::message::parse_repeated_message(buf, offset + rep_offset as usize, rep_len as usize, caps)?
|
||||
};
|
||||
},
|
||||
}
|
||||
|
|
@ -174,7 +174,7 @@ fn generate_serialize(message: &Message) -> TokenStream {
|
|||
&self,
|
||||
buf: &mut yunq::ByteBuffer<N>,
|
||||
offset: usize,
|
||||
caps: &mut alloc::vec::Vec<z_cap_t>,
|
||||
caps: &mut Vec<z_cap_t>,
|
||||
) -> Result<usize, ZError> {
|
||||
let num_fields = #num_fields;
|
||||
let core_size: u32 = (yunq::message::MESSAGE_HEADER_SIZE + 8 * num_fields) as u32;
|
||||
|
|
@ -183,10 +183,10 @@ fn generate_serialize(message: &Message) -> TokenStream {
|
|||
|
||||
#(#serializers)*
|
||||
|
||||
buf.write_at(offset + 0, yunq::message::MESSAGE_IDENT)?;
|
||||
buf.write_at(offset, yunq::message::MESSAGE_IDENT)?;
|
||||
buf.write_at(offset + 4, core_size)?;
|
||||
buf.write_at(offset + 8, next_extension)?;
|
||||
buf.write_at(offset + 12, 0 as u32)?;
|
||||
buf.write_at(offset + 12, 0_u32)?;
|
||||
Ok(next_extension as usize)
|
||||
}
|
||||
}
|
||||
|
|
@ -200,12 +200,12 @@ fn generate_parse(message: &Message) -> TokenStream {
|
|||
fn parse<const N: usize>(
|
||||
buf: &yunq::ByteBuffer<N>,
|
||||
offset: usize,
|
||||
caps: &alloc::vec::Vec<z_cap_t>,
|
||||
caps: &[z_cap_t],
|
||||
) -> Result<Self, ZError>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
if buf.at::<u32>(offset + 0)? != yunq::message::MESSAGE_IDENT {
|
||||
if buf.at::<u32>(offset)? != yunq::message::MESSAGE_IDENT {
|
||||
mammoth::debug!("Expected IDENT at offest {:#x}, got {:#x}", offset, buf.at::<u32>(offset)?);
|
||||
return Err(ZError::INVALID_ARGUMENT);
|
||||
}
|
||||
|
|
@ -303,7 +303,7 @@ fn generate_server_case(method: &Method) -> TokenStream {
|
|||
#id => {
|
||||
let req = #req::parse_from_request(byte_buffer, cap_buffer)?;
|
||||
let resp = self.handler.#name(req)?;
|
||||
cap_buffer.resize(0, 0);
|
||||
cap_buffer.clear();
|
||||
let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?;
|
||||
Ok(resp_len)
|
||||
},
|
||||
|
|
@ -312,7 +312,7 @@ fn generate_server_case(method: &Method) -> TokenStream {
|
|||
#id => {
|
||||
let req = #req::parse_from_request(byte_buffer, cap_buffer)?;
|
||||
self.handler.#name(req)?;
|
||||
cap_buffer.resize(0, 0);
|
||||
cap_buffer.clear();
|
||||
// TODO: Implement serialization for EmptyMessage so this is less hacky.
|
||||
yunq::message::serialize_error(byte_buffer, ZError::from(0));
|
||||
Ok(0x10)
|
||||
|
|
@ -321,7 +321,7 @@ fn generate_server_case(method: &Method) -> TokenStream {
|
|||
(None, Some(_)) => quote! {
|
||||
#id => {
|
||||
let resp = self.handler.#name()?;
|
||||
cap_buffer.resize(0, 0);
|
||||
cap_buffer.clear();
|
||||
let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?;
|
||||
Ok(resp_len)
|
||||
},
|
||||
|
|
@ -403,7 +403,7 @@ fn generate_async_server_case(method: &Method) -> TokenStream {
|
|||
#id => {
|
||||
let req = #req::parse_from_request(byte_buffer, cap_buffer)?;
|
||||
let resp = self.handler.#name(req).await?;
|
||||
cap_buffer.resize(0, 0);
|
||||
cap_buffer.clear();
|
||||
let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?;
|
||||
Ok(resp_len)
|
||||
},
|
||||
|
|
@ -412,7 +412,7 @@ fn generate_async_server_case(method: &Method) -> TokenStream {
|
|||
#id => {
|
||||
let req = #req::parse_from_request(byte_buffer, cap_buffer)?;
|
||||
self.handler.#name(req).await?;
|
||||
cap_buffer.resize(0, 0);
|
||||
cap_buffer.clear();
|
||||
// TODO: Implement serialization for EmptyMessage so this is less hacky.
|
||||
yunq::message::serialize_error(byte_buffer, ZError::from(0));
|
||||
Ok(0x10)
|
||||
|
|
@ -421,7 +421,7 @@ fn generate_async_server_case(method: &Method) -> TokenStream {
|
|||
(None, Some(_)) => quote! {
|
||||
#id => {
|
||||
let resp = self.handler.#name().await?;
|
||||
cap_buffer.resize(0, 0);
|
||||
cap_buffer.clear();
|
||||
let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?;
|
||||
Ok(resp_len)
|
||||
},
|
||||
|
|
@ -547,6 +547,7 @@ pub fn generate_code(ast: &[Decl]) -> String {
|
|||
use alloc::vec::Vec;
|
||||
use mammoth::zion::z_cap_t;
|
||||
use mammoth::zion::ZError;
|
||||
#[allow(unused_imports)]
|
||||
use yunq::ByteBuffer;
|
||||
use yunq::YunqMessage;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue