1pub struct ToolMeta {
2 pub name: &'static str,
3 pub write: bool,
4}
5
6pub const ALL_TOOLS: &[ToolMeta] = &[
7 ToolMeta { name: "create_entities", write: true },
8 ToolMeta { name: "create_relations", write: true },
9 ToolMeta { name: "add_observations", write: true },
10 ToolMeta { name: "delete_entities", write: true },
11 ToolMeta { name: "delete_observations",write: true },
12 ToolMeta { name: "delete_relations", write: true },
13 ToolMeta { name: "read_graph", write: false },
14 ToolMeta { name: "search_nodes", write: false },
15 ToolMeta { name: "open_nodes", write: false },
16 ToolMeta { name: "get_entity", write: false },
17 ToolMeta { name: "graph_stats", write: false },
18 ToolMeta { name: "search_relations", write: false },
19 ToolMeta { name: "find_path", write: false },
20 ToolMeta { name: "compact", write: true },
21];
22
23#[inline]
24pub fn tool_exists(name: &str) -> bool {
25 ALL_TOOLS.iter().any(|t| t.name == name)
26}
27
28#[inline]
29pub fn is_write_tool(name: &str) -> bool {
30 ALL_TOOLS.iter().find(|t| t.name == name).map(|t| t.write).unwrap_or(false)
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn test_tool_exists_known() {
39 assert!(tool_exists("create_entities"));
40 assert!(tool_exists("read_graph"));
41 assert!(tool_exists("search_nodes"));
42 }
43
44 #[test]
45 fn test_tool_exists_unknown() {
46 assert!(!tool_exists("nonexistent_tool"));
47 }
48
49 #[test]
50 fn test_is_write_tool() {
51 assert!(is_write_tool("create_entities"));
52 assert!(is_write_tool("delete_entities"));
53 assert!(!is_write_tool("read_graph"));
54 assert!(!is_write_tool("search_nodes"));
55 }
56
57 #[test]
58 fn test_all_tools_unique() {
59 let mut names: Vec<&str> = ALL_TOOLS.iter().map(|t| t.name).collect();
60 names.sort();
61 names.dedup();
62 assert_eq!(names.len(), ALL_TOOLS.len(), "Duplicate tool names");
63 }
64}