@@ -412,6 +412,97 @@ pub fn create_result_summary(result: &Value) -> String {
412412 }
413413}
414414
415+ /// Macro to reduce repetitive boilerplate around timing and logs for RPC calls
416+ #[ macro_export]
417+ macro_rules! log_rpc_call {
418+ ( $method: expr, $client: expr, $async_block: expr) => { {
419+ let request_id = $crate:: logging:: new_request_id( ) ;
420+ let start_time = std:: time:: Instant :: now( ) ;
421+
422+ $crate:: logging:: log_rpc_request_start(
423+ request_id,
424+ $method,
425+ Some ( & $client. url( ) ) ,
426+ None ,
427+ ) ;
428+
429+ match $async_block. await {
430+ Ok ( result) => {
431+ let duration = start_time. elapsed( ) . as_millis( ) as u64 ;
432+
433+ $crate:: logging:: log_rpc_request_success(
434+ request_id,
435+ $method,
436+ duration,
437+ Some ( "request completed" ) ,
438+ ) ;
439+
440+ Ok ( result)
441+ }
442+ Err ( e) => {
443+ let duration = start_time. elapsed( ) . as_millis( ) as u64 ;
444+ let error = $crate:: error:: McpError :: from( e)
445+ . with_request_id( request_id)
446+ . with_method( $method)
447+ . with_rpc_url( & $client. url( ) ) ;
448+
449+ $crate:: logging:: log_rpc_request_failure(
450+ request_id,
451+ $method,
452+ duration,
453+ & error. to_string( ) ,
454+ Some ( "request failed" ) ,
455+ ) ;
456+
457+ Err ( error)
458+ }
459+ }
460+ } } ;
461+ ( $method: expr, $client: expr, $async_block: expr, $params: expr) => { {
462+ let request_id = $crate:: logging:: new_request_id( ) ;
463+ let start_time = std:: time:: Instant :: now( ) ;
464+
465+ $crate:: logging:: log_rpc_request_start(
466+ request_id,
467+ $method,
468+ Some ( & $client. url( ) ) ,
469+ Some ( $params) ,
470+ ) ;
471+
472+ match $async_block. await {
473+ Ok ( result) => {
474+ let duration = start_time. elapsed( ) . as_millis( ) as u64 ;
475+
476+ $crate:: logging:: log_rpc_request_success(
477+ request_id,
478+ $method,
479+ duration,
480+ Some ( "request completed" ) ,
481+ ) ;
482+
483+ Ok ( result)
484+ }
485+ Err ( e) => {
486+ let duration = start_time. elapsed( ) . as_millis( ) as u64 ;
487+ let error = $crate:: error:: McpError :: from( e)
488+ . with_request_id( request_id)
489+ . with_method( $method)
490+ . with_rpc_url( & $client. url( ) ) ;
491+
492+ $crate:: logging:: log_rpc_request_failure(
493+ request_id,
494+ $method,
495+ duration,
496+ & error. to_string( ) ,
497+ Some ( "request failed" ) ,
498+ ) ;
499+
500+ Err ( error)
501+ }
502+ }
503+ } } ;
504+ }
505+
415506#[ cfg( test) ]
416507mod tests {
417508 use super :: * ;
0 commit comments