1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct FileChange {
7 pub file_path: String,
8 pub operation_type: OperationType,
9 pub diff_content: Option<String>,
10 pub lines_added: u32,
11 pub lines_removed: u32,
12 pub file_category: FileCategory,
13 pub summary: String,
14 pub impact_score: f32
15}
16
17#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
18pub enum OperationType {
19 Added,
20 Modified,
21 Deleted,
22 Renamed,
23 Binary
24}
25
26impl OperationType {
27 pub fn as_str(&self) -> &'static str {
28 match self {
29 OperationType::Added => "added",
30 OperationType::Modified => "modified",
31 OperationType::Deleted => "deleted",
32 OperationType::Renamed => "renamed",
33 OperationType::Binary => "binary"
34 }
35 }
36}
37
38impl From<&str> for OperationType {
39 fn from(s: &str) -> Self {
40 match s {
41 "added" => OperationType::Added,
42 "modified" => OperationType::Modified,
43 "deleted" => OperationType::Deleted,
44 "renamed" => OperationType::Renamed,
45 "binary" => OperationType::Binary,
46 _ => OperationType::Modified }
48 }
49}
50
51#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
52pub enum FileCategory {
53 Source,
54 Test,
55 Config,
56 Docs,
57 Binary,
58 Build
59}
60
61impl FileCategory {
62 pub fn as_str(&self) -> &'static str {
63 match self {
64 FileCategory::Source => "source",
65 FileCategory::Test => "test",
66 FileCategory::Config => "config",
67 FileCategory::Docs => "docs",
68 FileCategory::Binary => "binary",
69 FileCategory::Build => "build"
70 }
71 }
72}
73
74impl From<&str> for FileCategory {
75 fn from(s: &str) -> Self {
76 match s {
77 "source" => FileCategory::Source,
78 "test" => FileCategory::Test,
79 "config" => FileCategory::Config,
80 "docs" => FileCategory::Docs,
81 "binary" => FileCategory::Binary,
82 "build" => FileCategory::Build,
83 _ => FileCategory::Source }
85 }
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct CommitResponse {
91 pub message: String,
92 pub reasoning: String,
93 pub files: HashMap<String, FileChange>
94}