use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::CHAT_ATTACH_TOOL;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Attachment {
pub kind: String,
pub path: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub name: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub mime: String,
pub size: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub transcript: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ReplyAttachment {
pub path: String,
pub name: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub mime: String,
pub size: u64,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub caption: String,
}
pub fn reply_attachment(tool: &str, success: bool, output: &str) -> Option<ReplyAttachment> {
if tool != CHAT_ATTACH_TOOL || !success {
return None;
}
let value: Value = serde_json::from_str(output).ok()?;
serde_json::from_value(value.get("attached")?.clone()).ok()
}