ai_agent/commands/
add_dir_validation.rs1use 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}