Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions crates/rmcp/src/handler/server/tool.rs
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,20 +85,29 @@ impl<T: IntoContents> IntoCallToolResult for T {
}
}

impl<T: IntoContents, E: IntoContents> IntoCallToolResult for Result<T, E> {
implIntoCallToolResult for CallToolResult {
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
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<CallToolResult, crate::ErrorData> {
Err(self)
}
}

impl<T: IntoCallToolResult> IntoCallToolResult for Result<T, crate::ErrorData> {
impl<T: IntoCallToolResult, E: IntoCallToolResult> IntoCallToolResult for Result<T, E> {
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
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),
},
}
}
}
Expand DownExpand Up@@ -139,12 +148,6 @@ where
}
}

impl IntoCallToolResult for Result<CallToolResult, crate::ErrorData> {
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
self
}
}

pub trait CallToolHandler<S, A> {
fn call(
self,
Expand Down
17 changes: 1 addition & 16 deletions crates/rmcp/src/handler/server/wrapper/json.rs
Original file line numberDiff line numberDiff line change
Expand Up@@ -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
///
Expand DownExpand Up@@ -41,15 +38,3 @@ impl<T: Serialize + JsonSchema + 'static> IntoCallToolResult for Json<T> {
Ok(CallToolResult::structured(value))
}
}

// Implementation for Result<Json<T>, E>
impl<T: Serialize + JsonSchema + 'static, E: IntoContents> IntoCallToolResult
for Result<Json<T>, E>
{
fn into_call_tool_result(self) -> Result<CallToolResult, crate::ErrorData> {
match self {
Ok(value) => value.into_call_tool_result(),
Err(error) => Ok(CallToolResult::error(error.into_contents())),
}
}
}
Loading