From 752f61139dd65032b820c8c774d5f84e5d0f552c Mon Sep 17 00:00:00 2001 From: Dale Seo <5466341+DaleSeo@users.noreply.github.com> Date: Thu, 2 Apr 2026 21:52:50 -0400 Subject: [PATCH] refactor: unify IntoCallToolResult Result impls --- crates/rmcp/src/handler/server/tool.rs | 29 ++++++++++--------- .../rmcp/src/handler/server/wrapper/json.rs | 17 +---------- 2 files changed, 17 insertions(+), 29 deletions(-) diff --git a/crates/rmcp/src/handler/server/tool.rs b/crates/rmcp/src/handler/server/tool.rs index 03beface..2b9fe62a 100644 --- a/crates/rmcp/src/handler/server/tool.rs +++ b/crates/rmcp/src/handler/server/tool.rs @@ -85,20 +85,29 @@ impl IntoCallToolResult for T { } } -impl IntoCallToolResult for Result { +impl IntoCallToolResult for CallToolResult { fn into_call_tool_result(self) -> Result { - match self { - Ok(value) => Ok(CallToolResult::success(value.into_contents())), - Err(error) => Ok(CallToolResult::error(error.into_contents())), - } + Ok(self) + } +} + +impl IntoCallToolResult for crate::ErrorData { + fn into_call_tool_result(self) -> Result { + Err(self) } } -impl IntoCallToolResult for Result { +impl IntoCallToolResult for Result { fn into_call_tool_result(self) -> Result { match self { Ok(value) => value.into_call_tool_result(), - Err(error) => Err(error), + Err(error) => match error.into_call_tool_result() { + Ok(mut result) => { + result.is_error = Some(true); + Ok(result) + } + Err(e) => Err(e), + }, } } } @@ -139,12 +148,6 @@ where } } -impl IntoCallToolResult for Result { - fn into_call_tool_result(self) -> Result { - self - } -} - pub trait CallToolHandler { fn call( self, diff --git a/crates/rmcp/src/handler/server/wrapper/json.rs b/crates/rmcp/src/handler/server/wrapper/json.rs index bc2170a3..c03fbd03 100644 --- a/crates/rmcp/src/handler/server/wrapper/json.rs +++ b/crates/rmcp/src/handler/server/wrapper/json.rs @@ -3,10 +3,7 @@ use std::borrow::Cow; use schemars::JsonSchema; use serde::Serialize; -use crate::{ - handler::server::tool::IntoCallToolResult, - model::{CallToolResult, IntoContents}, -}; +use crate::{handler::server::tool::IntoCallToolResult, model::CallToolResult}; /// Json wrapper for structured output /// @@ -41,15 +38,3 @@ impl IntoCallToolResult for Json { Ok(CallToolResult::structured(value)) } } - -// Implementation for Result, E> -impl IntoCallToolResult - for Result, E> -{ - fn into_call_tool_result(self) -> Result { - match self { - Ok(value) => value.into_call_tool_result(), - Err(error) => Ok(CallToolResult::error(error.into_contents())), - } - } -}