terminal_jarvis/presentation/models/
tool.rs1use crate::tools::tools_config::ToolDefinition;
7
8#[derive(Debug, Clone, PartialEq)]
10pub struct ToolAuth {
11 pub env_vars: Vec<String>,
12 pub setup_url: String,
13 pub browser_auth: bool,
14 pub auth_instructions: Option<String>,
15}
16
17#[derive(Debug, Clone, PartialEq)]
19pub struct ToolConfig {
20 pub homepage: String,
21 pub documentation: String,
22 pub features: Option<Vec<String>>,
23 pub auth: ToolAuth,
24}
25
26#[derive(Debug, Clone, PartialEq)]
28pub struct Tool {
29 pub name: String,
30 pub display_name: String,
31 pub description: String,
32 pub cli_command: String,
33 pub config: ToolConfig,
34 pub is_installed: bool,
35 pub is_available: bool,
36}
37
38impl Tool {
39 pub fn new(
40 name: String,
41 display_name: String,
42 description: String,
43 cli_command: String,
44 config: ToolConfig,
45 is_installed: bool,
46 is_available: bool,
47 ) -> Self {
48 Self {
49 name,
50 display_name,
51 description,
52 cli_command,
53 config,
54 is_installed,
55 is_available,
56 }
57 }
58
59 pub fn from_tool_definition(
60 name: String,
61 definition: &ToolDefinition,
62 is_installed: bool,
63 ) -> Self {
64 let config = ToolConfig {
65 homepage: definition.homepage.clone(),
66 documentation: definition.documentation.clone(),
67 features: definition.features.as_ref().map(|f| {
68 vec![
69 format!("Supports Files: {}", f.supports_files),
70 format!("Supports Streaming: {}", f.supports_streaming),
71 format!("Supports Conversation: {}", f.supports_conversation),
72 ]
73 }),
74 auth: ToolAuth {
75 env_vars: definition.auth.env_vars.clone(),
76 setup_url: definition.auth.setup_url.clone(),
77 browser_auth: definition.auth.browser_auth,
78 auth_instructions: definition.auth.auth_instructions.clone(),
79 },
80 };
81
82 Self::new(
83 name.clone(),
84 definition.display_name.clone(),
85 definition.description.clone(),
86 definition.cli_command.clone(),
87 config,
88 is_installed,
89 true, )
91 }
92
93 pub fn set_installed(&mut self, installed: bool) {
94 self.is_installed = installed;
95 }
96
97 pub fn is_available(&self) -> bool {
98 self.is_available
99 }
100}