use serde_json;
pub fn is_tool_error(result: &serde_json::Value) -> bool {
result
.get("isError")
.and_then(serde_json::Value::as_bool)
.unwrap_or(false)
}
pub fn extract_tool_content(result: &serde_json::Value) -> String {
result
.get("content")
.and_then(|v| v.as_array())
.map_or_else(
|| serde_json::to_string_pretty(result).unwrap_or_default(),
|arr| {
arr.iter()
.filter_map(|item| match item.get("type")?.as_str()? {
"text" => item.get("text")?.as_str().map(String::from),
other => Some(format!("[{other} content]")),
})
.collect::<Vec<_>>()
.join("\n")
},
)
}
pub fn format_tool_result(result: &serde_json::Value) -> String {
let content = extract_tool_content(result);
if is_tool_error(result) {
format!("Error: {content}")
} else {
content
}
}