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