1#![warn(missing_docs)]
2
3use crate::change_set::ChangeSet;
4use crate::file_change::{FileChange, FileChangeDetector};
5use std::path::Path;
6
7pub struct ChangePreview {
9 pub file_changes: Vec<FileChange>,
11 pub change_sets: Vec<ChangeSet>,
13}
14
15impl ChangePreview {
16 pub fn new(file_changes: Vec<FileChange>, change_sets: Vec<ChangeSet>) -> Self {
18 Self { file_changes, change_sets }
19 }
20
21 pub fn generate_preview(&self) -> String {
23 let mut preview = String::new();
24
25 let detector = FileChangeDetector::new(Path::new("."));
27 preview.push_str(&detector.generate_change_summary(&self.file_changes));
28
29 if !self.change_sets.is_empty() {
31 preview.push_str("\nChange sets:\n");
32 for change_set in &self.change_sets {
33 preview.push_str(&format!("- [{}] {}\n", change_set.r#type.as_str(), change_set.summary));
34 }
35 }
36
37 preview
38 }
39}