use objectiveai_sdk::cli::command::McpResponseItem;
use objectiveai_sdk::mcp::tool::ContentBlock;
use rmcp::model::Content;
use serde_json::Value;
pub fn format_items(items: Vec<McpResponseItem>) -> Vec<Content> {
match items.len() {
0 => vec![Content::text("<empty>")],
1 => {
let item = items.into_iter().next().unwrap();
match item {
McpResponseItem::Media(ContentBlock::Text(t)) => {
vec![Content::text(t.text)]
}
McpResponseItem::Media(other) => vec![Content::from(other)],
McpResponseItem::JSONL(Value::String(s)) => vec![Content::text(s)],
McpResponseItem::JSONL(other) => {
let body = serde_json::to_string(&other)
.unwrap_or_else(|_| String::from("<serialize error>"));
vec![Content::text(body)]
}
}
}
_ => {
let mut blocks: Vec<Content> = Vec::with_capacity(items.len() * 3 + 2);
blocks.push(Content::text("["));
let mut first = true;
for item in items {
if !first {
blocks.push(Content::text(","));
}
first = false;
match item {
McpResponseItem::Media(ContentBlock::Text(t)) => {
blocks.push(Content::text("\""));
blocks.push(Content::text(t.text));
blocks.push(Content::text("\""));
}
McpResponseItem::Media(other) => {
blocks.push(Content::text("\""));
blocks.push(Content::from(other));
blocks.push(Content::text("\""));
}
McpResponseItem::JSONL(Value::String(s)) => {
blocks.push(Content::text("\""));
blocks.push(Content::text(format!(
"{}",
json_escape::escape_str(&s)
)));
blocks.push(Content::text("\""));
}
McpResponseItem::JSONL(other) => {
let body = serde_json::to_string(&other)
.unwrap_or_else(|_| String::from("\"<serialize error>\""));
blocks.push(Content::text(body));
}
}
}
blocks.push(Content::text("]"));
blocks
}
}
}