Skip to main content

nargo_changes/
preview.rs

1#![warn(missing_docs)]
2
3use crate::change_set::ChangeSet;
4use crate::file_change::{FileChange, FileChangeDetector};
5use std::path::Path;
6
7/// Change preview.
8pub struct ChangePreview {
9    /// The file changes.
10    pub file_changes: Vec<FileChange>,
11    /// The change sets.
12    pub change_sets: Vec<ChangeSet>,
13}
14
15impl ChangePreview {
16    /// Creates a new change preview.
17    pub fn new(file_changes: Vec<FileChange>, change_sets: Vec<ChangeSet>) -> Self {
18        Self { file_changes, change_sets }
19    }
20
21    /// Generates a preview of the changes.
22    pub fn generate_preview(&self) -> String {
23        let mut preview = String::new();
24
25        // Add file changes summary
26        let detector = FileChangeDetector::new(Path::new("."));
27        preview.push_str(&detector.generate_change_summary(&self.file_changes));
28
29        // Add change sets summary
30        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}