From a4a43ffeb85f53a02683b0d14002ff2c753cd1da Mon Sep 17 00:00:00 2001 From: John Howard Date: Tue, 26 Aug 2025 13:35:28 -0700 Subject: [PATCH] feat(model): expose client method name This is useful for including in logs etc. Without this its pretty painful to extract manually --- crates/rmcp/src/model.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/crates/rmcp/src/model.rs b/crates/rmcp/src/model.rs index d2cd43db..358a3b1a 100644 --- a/crates/rmcp/src/model.rs +++ b/crates/rmcp/src/model.rs @@ -58,6 +58,9 @@ pub struct EmptyObject {} pub trait ConstString: Default { const VALUE: &str; + fn as_str(&self) -> &'static str { + Self::VALUE + } } #[macro_export] macro_rules! const_string { @@ -1491,6 +1494,26 @@ ts_union!( | ListToolsRequest; ); +impl ClientRequest { + pub fn method(&self) -> &'static str { + match &self { + ClientRequest::PingRequest(r) => r.method.as_str(), + ClientRequest::InitializeRequest(r) => r.method.as_str(), + ClientRequest::CompleteRequest(r) => r.method.as_str(), + ClientRequest::SetLevelRequest(r) => r.method.as_str(), + ClientRequest::GetPromptRequest(r) => r.method.as_str(), + ClientRequest::ListPromptsRequest(r) => r.method.as_str(), + ClientRequest::ListResourcesRequest(r) => r.method.as_str(), + ClientRequest::ListResourceTemplatesRequest(r) => r.method.as_str(), + ClientRequest::ReadResourceRequest(r) => r.method.as_str(), + ClientRequest::SubscribeRequest(r) => r.method.as_str(), + ClientRequest::UnsubscribeRequest(r) => r.method.as_str(), + ClientRequest::CallToolRequest(r) => r.method.as_str(), + ClientRequest::ListToolsRequest(r) => r.method.as_str(), + } + } +} + ts_union!( export type ClientNotification = | CancelledNotification