refactor: unify IntoCallToolResult Result impls (#787)

This commit is contained in:
Dale Seo 2026-04-08 10:39:18 -04:00 committed by GitHub
parent d98248ac22
commit 5891b45162
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 29 deletions

View file

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

View file

@ -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<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())),
}
}
}