1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
4#[serde(rename_all = "lowercase")]
5pub enum ChangeType {
6 Added,
7 Modified,
8 Deleted,
9 Moved,
10 Renamed,
11}
12
13impl std::fmt::Display for ChangeType {
14 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15 match self {
16 ChangeType::Added => write!(f, "added"),
17 ChangeType::Modified => write!(f, "modified"),
18 ChangeType::Deleted => write!(f, "deleted"),
19 ChangeType::Moved => write!(f, "moved"),
20 ChangeType::Renamed => write!(f, "renamed"),
21 }
22 }
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct SemanticChange {
28 pub id: String,
29 pub entity_id: String,
30 pub change_type: ChangeType,
31 pub entity_type: String,
32 pub entity_name: String,
33 pub file_path: String,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub old_entity_name: Option<String>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub old_file_path: Option<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub before_content: Option<String>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub after_content: Option<String>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub commit_sha: Option<String>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub author: Option<String>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub timestamp: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
51 pub structural_change: Option<bool>,
52}