#![allow(dead_code, unused_imports, unused_must_use)]
use laminate::ToolDefinition;
#[derive(ToolDefinition)]
struct GetWeather {
city: String,
units: Option<String>,
}
#[test]
fn basic_tool_definition() {
let def = GetWeather::tool_definition();
println!("{}", serde_json::to_string_pretty(&def).unwrap());
assert_eq!(def["name"], "get_weather");
assert_eq!(def["description"], "Get the current weather for a location");
assert_eq!(def["input_schema"]["type"], "object");
let required = def["input_schema"]["required"].as_array().unwrap();
assert!(required.contains(&serde_json::json!("city")));
assert!(!required.contains(&serde_json::json!("units")));
assert_eq!(def["input_schema"]["properties"]["city"]["type"], "string");
assert_eq!(def["input_schema"]["properties"]["units"]["type"], "string");
assert_eq!(
def["input_schema"]["properties"]["city"]["description"],
"The city to look up weather for"
);
}
#[derive(ToolDefinition)]
struct SearchDocs {
query: String,
max_results: i32,
include_archived: bool,
}
#[test]
fn all_required_fields() {
let def = SearchDocs::tool_definition();
let required = def["input_schema"]["required"].as_array().unwrap();
assert_eq!(required.len(), 3);
assert_eq!(
def["input_schema"]["properties"]["max_results"]["type"],
"integer"
);
assert_eq!(
def["input_schema"]["properties"]["include_archived"]["type"],
"boolean"
);
}
#[derive(ToolDefinition)]
#[tool(name = "custom_name", description = "A custom description")]
struct CustomNamed {
value: f64,
}
#[test]
fn custom_name_and_description() {
let def = CustomNamed::tool_definition();
assert_eq!(def["name"], "custom_name");
assert_eq!(def["description"], "A custom description");
}