#![allow(dead_code)]
use serde_json::{Value, json};
use url::Url;
fn create_minimal_tool(
name: &str,
description: &str,
parameters: Value,
url: Option<&str>,
) -> Result<Value, String> {
if name.is_empty() {
return Err("Tool name cannot be empty".to_string());
}
if description.is_empty() {
return Err("Tool description cannot be empty".to_string());
}
if parameters.is_null() {
return Err("Tool parameters cannot be empty".to_string());
}
let mut tool = json!({
"function": {
"name": name,
"description": description,
"parameters": parameters,
},
});
if let Some(url) = url {
let parsed_url = Url::parse(url).map_err(|_| "Invalid URL".to_string())?;
tool["url"] = json!(parsed_url.to_string());
}
let mut wrapped_tool = json!([]);
wrapped_tool
.as_array_mut()
.ok_or_else(|| "Invalid tool format".to_string())?
.push(tool);
Ok(wrapped_tool)
}
fn update_tool_name(tool: &mut Value, new_name: &str) -> Result<(), String> {
let function = tool["function"]
.as_object_mut()
.ok_or_else(|| "Invalid tool format".to_string())?;
function["name"] = json!(new_name);
Ok(())
}
fn update_tool_description(tool: &mut Value, new_description: &str) -> Result<(), String> {
let function = tool["function"]
.as_object_mut()
.ok_or_else(|| "Invalid tool format".to_string())?;
function["description"] = json!(new_description);
Ok(())
}
fn update_tool_parameters(tool: &mut Value, new_parameters: Value) -> Result<(), String> {
let function = tool["function"]
.as_object_mut()
.ok_or_else(|| "Invalid tool format".to_string())?;
function["parameters"] = new_parameters;
Ok(())
}
fn update_tool_url(tool: &mut Value, new_url: &str) -> Result<(), String> {
let parsed_url = Url::parse(new_url).map_err(|_| "Invalid URL".to_string())?;
tool["url"] = json!(parsed_url.to_string());
Ok(())
}
fn remove_tool_url(tool: &mut Value) -> Result<(), String> {
tool.as_object_mut()
.ok_or_else(|| "Invalid tool format".to_string())?
.remove("url");
Ok(())
}