use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Tool {
pub name: String,
pub description: Option<String>,
pub schema: Option<Value>,
pub config: Option<Value>,
}
impl Tool {
pub fn size(&self) -> usize {
let mut size = self.name.len();
size += self.description.as_ref().map(|d| d.len()).unwrap_or_default();
size += self
.schema
.as_ref()
.map(|s| serde_json::to_string(s).map(|j| j.len()).unwrap_or_default())
.unwrap_or_default();
size += self
.config
.as_ref()
.map(|c| serde_json::to_string(c).map(|j| j.len()).unwrap_or_default())
.unwrap_or_default();
size
}
}
impl Tool {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: name.into(),
description: None,
schema: None,
config: None,
}
}
}
impl Tool {
pub fn with_description(mut self, description: impl Into<String>) -> Self {
self.description = Some(description.into());
self
}
pub fn with_schema(mut self, parameters: Value) -> Self {
self.schema = Some(parameters);
self
}
pub fn with_config(mut self, config: Value) -> Self {
self.config = Some(config);
self
}
}