From e41f58c714e262eec604de88940ea8709192df0e Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Tue, 30 Jul 2024 14:33:19 -0700 Subject: [PATCH] Use method number in rust yunq client. --- rust/lib/yunq/src/client.rs | 3 ++- yunq/rust/src/codegen.rs | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/rust/lib/yunq/src/client.rs b/rust/lib/yunq/src/client.rs index f8ff367..68241e2 100644 --- a/rust/lib/yunq/src/client.rs +++ b/rust/lib/yunq/src/client.rs @@ -7,12 +7,13 @@ use mammoth::zion::ZError; const SENTINEL: u32 = 0xBEEFDEAD; pub fn call_endpoint( + request_id: u64, req: &Req, byte_buffer: &mut ByteBuffer, endpoint_cap: z_cap_t, ) -> Result { byte_buffer.write_at(0, SENTINEL)?; - byte_buffer.write_at(8, 1 as u64)?; + byte_buffer.write_at(8, request_id as u64)?; let mut cap_buffer = Vec::new(); diff --git a/yunq/rust/src/codegen.rs b/yunq/rust/src/codegen.rs index e20f6b5..1f4bc64 100644 --- a/yunq/rust/src/codegen.rs +++ b/yunq/rust/src/codegen.rs @@ -26,23 +26,24 @@ fn generate_message(message: &Message) -> TokenStream { } fn generate_method(method: &Method) -> TokenStream { + let id = proc_macro2::Literal::u64_suffixed(method.number); let name = ident(&method.name.to_case(Case::Snake)); let maybe_req = method.request.clone().map(|r| ident(&r)); let maybe_resp = method.response.clone().map(|r| ident(&r)); match (maybe_req, maybe_resp) { (Some(req), Some(resp)) => quote! { pub fn #name (&mut self, req: & #req) -> Result<#resp, ZError> { - yunq::client::call_endpoint(req, &mut self.byte_buffer, self.endpoint_cap) + yunq::client::call_endpoint(#id, req, &mut self.byte_buffer, self.endpoint_cap) } }, (Some(req), None) => quote! { pub fn #name (&mut self, req: & #req) -> Result { - yunq::client::call_endpoint(req, &mut self.byte_buffer, self.endpoint_cap) + yunq::client::call_endpoint(#id, req, &mut self.byte_buffer, self.endpoint_cap) } }, (None, Some(resp)) => quote! { pub fn #name (&mut self) -> Result<#resp, ZError> { - yunq::client::call_endpoint(&yunq::message::Empty{}, &mut self.byte_buffer, self.endpoint_cap) + yunq::client::call_endpoint(#id, &yunq::message::Empty{}, &mut self.byte_buffer, self.endpoint_cap) } }, _ => unreachable!(),