use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolCall {
pub call_id: String,
pub fn_name: String,
pub fn_arguments: Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub thought_signatures: Option<Vec<String>>,
}
impl ToolCall {
pub fn size(&self) -> usize {
let mut size = self.call_id.len();
size += self.fn_name.len();
size += serde_json::to_string(&self.fn_arguments).map(|j| j.len()).unwrap_or_default();
size += self
.thought_signatures
.as_ref()
.map(|sigs| sigs.iter().map(|s| s.len()).sum::<usize>())
.unwrap_or_default();
size
}
}