vtcode_core/tools/
generation_helpers.rs1use crate::tools::file_tracker::FileTracker;
8use anyhow::Result;
9use serde_json::Value;
10use std::path::PathBuf;
11
12pub struct GenerationHelper {
14 file_tracker: FileTracker,
15}
16
17impl GenerationHelper {
18 pub fn new(workspace_root: PathBuf) -> Self {
19 Self { file_tracker: FileTracker::new(workspace_root) }
20 }
21
22 pub async fn verify_and_report(&self, filename: &str) -> Result<String> {
24 match self.file_tracker.verify_file_exists(filename).await? {
25 Some(file_info) => {
26 Ok(format!("✓ Generated: {} ({} bytes)", file_info.absolute_path.display(), file_info.size))
27 }
28 None => Ok(format!(
29 "⚠ File not found: {filename}. Generation may have failed or file was created in a different location."
30 )),
31 }
32 }
33
34 pub async fn create_verified_response(&self, filename: &str, additional_info: Option<&str>) -> Result<String> {
36 let file_report = self.verify_and_report(filename).await?;
37
38 let response = if let Some(info) = additional_info {
39 format!("{info}\n\n{file_report}")
40 } else {
41 file_report
42 };
43
44 Ok(response)
45 }
46
47 pub async fn create_json_response(&self, filename: &str, metadata: Value) -> Result<Value> {
49 let verification = self.file_tracker.verify_file_exists(filename).await?;
50
51 Ok(serde_json::json!({
52 "status": "completed",
53 "filename": filename,
54 "verification": verification.map(|f| f.to_json()),
55 "metadata": metadata,
56 }))
57 }
58}
59
60pub async fn quick_verify(workspace_root: PathBuf, filename: &str) -> Result<String> {
62 let helper = GenerationHelper::new(workspace_root);
63 helper.verify_and_report(filename).await
64}
65
66#[cfg(test)]
67mod tests {
68 use super::*;
69 use tempfile::TempDir;
70
71 #[tokio::test]
72 async fn test_verification_message() {
73 let temp_dir = TempDir::new().unwrap();
74 let helper = GenerationHelper::new(temp_dir.path().to_path_buf());
75
76 let result = helper.verify_and_report("test.pdf").await.unwrap();
78 assert!(result.contains("⚠ File not found"));
79 }
80
81 #[tokio::test]
82 async fn test_create_verified_response() {
83 let temp_dir = TempDir::new().unwrap();
84 let helper = GenerationHelper::new(temp_dir.path().to_path_buf());
85
86 let response = helper
87 .create_verified_response("test.pdf", Some("Additional info"))
88 .await
89 .unwrap();
90
91 assert!(response.contains("Additional info"));
92 assert!(response.contains("⚠ File not found"));
93 }
94}