Skip to main content

ai_agent/commands/
add_dir_validation.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub enum AddDirectoryResultType {
5    Success,
6    EmptyPath,
7    PathNotFound,
8    NotADirectory,
9    AlreadyInWorkingDirectory,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(tag = "resultType")]
14pub enum AddDirectoryResult {
15    #[serde(rename = "success")]
16    Success { absolute_path: String },
17    #[serde(rename = "emptyPath")]
18    EmptyPath,
19    #[serde(rename = "pathNotFound")]
20    PathNotFound {
21        directory_path: String,
22        absolute_path: String,
23    },
24    #[serde(rename = "notADirectory")]
25    NotADirectory {
26        directory_path: String,
27        absolute_path: String,
28    },
29    #[serde(rename = "alreadyInWorkingDirectory")]
30    AlreadyInWorkingDirectory {
31        directory_path: String,
32        working_dir: String,
33    },
34}
35
36pub fn validate_directory_for_workspace(
37    directory_path: &str,
38    _permission_context: &impl ToolPermissionContext,
39) -> AddDirectoryResult {
40    if directory_path.is_empty() {
41        return AddDirectoryResult::EmptyPath;
42    }
43    AddDirectoryResult::Success {
44        absolute_path: directory_path.to_string(),
45    }
46}
47
48pub trait ToolPermissionContext {}
49
50pub fn add_dir_help_message(result: &AddDirectoryResult) -> String {
51    match result {
52        AddDirectoryResult::EmptyPath => "Please provide a directory path.".to_string(),
53        AddDirectoryResult::Success { absolute_path } => {
54            format!("Added {} as a working directory.", absolute_path)
55        }
56        _ => "Invalid directory".to_string(),
57    }
58}