Skip to content

Commit 752f611

Browse files
committed
refactor: unify IntoCallToolResult Result impls
1 parent 8e22aa2 commit 752f611

2 files changed

Lines changed: 17 additions & 29 deletions

File tree

crates/rmcp/src/handler/server/tool.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,29 @@ impl<T: IntoContents> IntoCallToolResult for T {
8585
}
8686
}
8787

88-
impl<T: IntoContents, E: IntoContents> IntoCallToolResult for Result<T, E> {
88+
impl IntoCallToolResult for CallToolResult {
8989
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
90-
match self {
91-
Ok(value) => Ok(CallToolResult::success(value.into_contents())),
92-
Err(error) => Ok(CallToolResult::error(error.into_contents())),
93-
}
90+
Ok(self)
91+
}
92+
}
93+
94+
impl IntoCallToolResult for crate::ErrorData {
95+
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
96+
Err(self)
9497
}
9598
}
9699

97-
impl<T: IntoCallToolResult> IntoCallToolResult for Result<T, crate::ErrorData> {
100+
impl<T: IntoCallToolResult, E: IntoCallToolResult> IntoCallToolResult for Result<T, E> {
98101
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
99102
match self {
100103
Ok(value) => value.into_call_tool_result(),
101-
Err(error) => Err(error),
104+
Err(error) => match error.into_call_tool_result() {
105+
Ok(mut result) => {
106+
result.is_error = Some(true);
107+
Ok(result)
108+
}
109+
Err(e) => Err(e),
110+
},
102111
}
103112
}
104113
}
@@ -139,12 +148,6 @@ where
139148
}
140149
}
141150

142-
impl IntoCallToolResult for Result<CallToolResult, crate::ErrorData> {
143-
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
144-
self
145-
}
146-
}
147-
148151
pub trait CallToolHandler<S, A> {
149152
fn call(
150153
self,

crates/rmcp/src/handler/server/wrapper/json.rs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ use std::borrow::Cow;
33
use schemars::JsonSchema;
44
use serde::Serialize;
55

6-
use crate::{
7-
handler::server::tool::IntoCallToolResult,
8-
model::{CallToolResult, IntoContents},
9-
};
6+
use crate::{handler::server::tool::IntoCallToolResult, model::CallToolResult};
107

118
/// Json wrapper for structured output
129
///
@@ -41,15 +38,3 @@ impl<T: Serialize + JsonSchema + 'static> IntoCallToolResult for Json<T> {
4138
Ok(CallToolResult::structured(value))
4239
}
4340
}
44-
45-
// Implementation for Result<Json<T>, E>
46-
impl<T: Serialize + JsonSchema + 'static, E: IntoContents> IntoCallToolResult
47-
for Result<Json<T>, E>
48-
{
49-
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
50-
match self {
51-
Ok(value) => value.into_call_tool_result(),
52-
Err(error) => Ok(CallToolResult::error(error.into_contents())),
53-
}
54-
}
55-
}

0 commit comments

Comments
 (0)