From 546523fc45a7e2f0a9b14fbe797f7a0ed70e89d8 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Wed, 4 Feb 2026 15:45:36 +0000 Subject: [PATCH] Initial upload: GitPulse - Developer Productivity Analyzer CLI tool --- src/models/file.rs | 65 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/models/file.rs diff --git a/src/models/file.rs b/src/models/file.rs new file mode 100644 index 0000000..8ad8a94 --- /dev/null +++ b/src/models/file.rs @@ -0,0 +1,65 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FileStats { + pub path: String, + pub lines_added: usize, + pub lines_removed: usize, + pub net_change: i64, + pub commits: usize, + pub last_modified: String, + pub authors: Vec, + pub file_type: String, + pub is_renamed: bool, + pub rename_count: usize, +} + +impl Default for FileStats { + fn default() -> Self { + Self { + path: String::new(), + lines_added: 0, + lines_removed: 0, + net_change: 0, + commits: 0, + last_modified: String::new(), + authors: Vec::new(), + file_type: String::new(), + is_renamed: false, + rename_count: 0, + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FileChange { + pub path: String, + pub change_type: ChangeType, + pub lines_added: usize, + pub lines_removed: usize, + pub old_path: Option, + pub similarity: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum ChangeType { + Added, + Deleted, + Modified, + Renamed, + Copied, + Untracked, +} + +impl From for ChangeType { + fn from(change_type: git2::ChangeType) -> Self { + match change_type { + git2::ChangeType::Addition => ChangeType::Added, + git2::ChangeType::Deletion => ChangeType::Deleted, + git2::ChangeType::Modification => ChangeType::Modified, + git2::ChangeType::Renamed => ChangeType::Renamed, + git2::ChangeType::Copied => ChangeType::Copied, + _ => ChangeType::Untracked, + } + } +}