From 7a9e338d68c206902484b52358dca387746d8006 Mon Sep 17 00:00:00 2001 From: Michael Mikovsky <77305074+Astatin3@users.noreply.github.com> Date: Sun, 26 Apr 2026 01:18:59 -0600 Subject: [PATCH] Collapse local procedure lookup into one pass --- src/protocol/tree/endpoint/receive.rs | 54 +++++++++++++-------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/src/protocol/tree/endpoint/receive.rs b/src/protocol/tree/endpoint/receive.rs index 4a63469..af49af0 100644 --- a/src/protocol/tree/endpoint/receive.rs +++ b/src/protocol/tree/endpoint/receive.rs @@ -12,18 +12,22 @@ use super::core::{ }; impl ProtocolEndpoint { - fn supports_local_procedure(&self, dst_leaf: Option<&str>, procedure_id: &str) -> bool { + fn local_procedure_fault( + &self, + dst_leaf: Option<&str>, + procedure_id: &str, + ) -> Option { match dst_leaf { - Some(leaf_name) => self - .leaves - .get(leaf_name) - .map(|leaf| { - leaf.procedures - .iter() - .any(|procedure| procedure == procedure_id) - }) - .unwrap_or(false), - None => self.endpoint_procedures.contains(procedure_id), + Some(leaf_name) => match self.leaves.get(leaf_name) { + Some(leaf) => (!leaf + .procedures + .iter() + .any(|procedure| procedure == procedure_id)) + .then_some(ProtocolFault::UNKNOWN_PROCEDURE), + None => Some(ProtocolFault::UNKNOWN_LEAF), + }, + None => (!self.endpoint_procedures.contains(procedure_id)) + .then_some(ProtocolFault::UNKNOWN_PROCEDURE), } } @@ -41,26 +45,19 @@ impl ProtocolEndpoint { return self.handle_introspection(&header, key); } - let procedure_is_supported = - self.supports_local_procedure(header.dst_leaf.as_deref(), &message.procedure_id); - - if !procedure_is_supported { - let fault = if header - .dst_leaf - .as_ref() - .is_some_and(|name| !self.leaves.contains_key(name)) - { - ProtocolFault::UNKNOWN_LEAF - } else { - ProtocolFault::UNKNOWN_PROCEDURE - }; + if let Some(fault) = + self.local_procedure_fault(header.dst_leaf.as_deref(), &message.procedure_id) + { return self.emit_fault_if_possible(key, fault); } if let Some(hook) = &message.response_hook - && let Some(key) = key.clone() && hook.return_path != self.path - && self + { + let Some(key) = key.clone() else { + unreachable!("response_hook checked above"); + }; + if self .hooks .insert_active( key.clone(), @@ -72,8 +69,9 @@ impl ProtocolEndpoint { }, ) .is_err() - { - return self.emit_fault_if_possible(Some(key), ProtocolFault::INTERNAL_ERROR); + { + return self.emit_fault_if_possible(Some(key), ProtocolFault::INTERNAL_ERROR); + } } Ok(EndpointOutcome::Local(LocalEvent::Call { header, message }))