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 {
20 file_tracker: FileTracker::new(workspace_root),
21 }
22 }
23
24 pub async fn verify_and_report(&self, filename: &str) -> Result<String> {
26 match self.file_tracker.verify_file_exists(filename).await? {
27 Some(file_info) => Ok(format!(
28 "✓ Generated: {} ({} bytes)",
29 file_info.absolute_path.display(),
30 file_info.size
31 )),
32 None => Ok(format!(
33 "⚠ File not found: {}. Generation may have failed or file was created in a different location.",
34 filename
35 )),
36 }
37 }
38
39 pub async fn create_verified_response(
41 &self,
42 filename: &str,
43 additional_info: Option<&str>,
44 ) -> Result<String> {
45 let file_report = self.verify_and_report(filename).await?;
46
47 let response = if let Some(info) = additional_info {
48 format!("{}\n\n{}", info, file_report)
49 } else {
50 file_report
51 };
52
53 Ok(response)
54 }
55
56 pub async fn create_json_response(&self, filename: &str, metadata: Value) -> Result<Value> {
58 let verification = self.file_tracker.verify_file_exists(filename).await?;
59
60 Ok(serde_json::json!({
61 "status": "completed",
62 "filename": filename,
63 "verification": verification.map(|f| f.to_json()),
64 "metadata": metadata,
65 }))
66 }
67}
68
69pub async fn quick_verify(workspace_root: PathBuf, filename: &str) -> Result<String> {
71 let helper = GenerationHelper::new(workspace_root);
72 helper.verify_and_report(filename).await
73}
74
75#[cfg(test)]
76mod tests {
77 use super::*;
78 use tempfile::TempDir;
79
80 #[tokio::test]
81 async fn test_verification_message() {
82 let temp_dir = TempDir::new().unwrap();
83 let helper = GenerationHelper::new(temp_dir.path().to_path_buf());
84
85 let result = helper.verify_and_report("test.pdf").await.unwrap();
87 assert!(result.contains("⚠ File not found"));
88 }
89
90 #[tokio::test]
91 async fn test_create_verified_response() {
92 let temp_dir = TempDir::new().unwrap();
93 let helper = GenerationHelper::new(temp_dir.path().to_path_buf());
94
95 let response = helper
96 .create_verified_response("test.pdf", Some("Additional info"))
97 .await
98 .unwrap();
99
100 assert!(response.contains("Additional info"));
101 assert!(response.contains("⚠ File not found"));
102 }
103}