Skip to main content

sem_core/model/
change.rs

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    Reordered,
12}
13
14impl std::fmt::Display for ChangeType {
15    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16        match self {
17            ChangeType::Added => write!(f, "added"),
18            ChangeType::Modified => write!(f, "modified"),
19            ChangeType::Deleted => write!(f, "deleted"),
20            ChangeType::Moved => write!(f, "moved"),
21            ChangeType::Renamed => write!(f, "renamed"),
22            ChangeType::Reordered => write!(f, "reordered"),
23        }
24    }
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[serde(rename_all = "camelCase")]
29pub struct SemanticChange {
30    pub id: String,
31    pub entity_id: String,
32    pub change_type: ChangeType,
33    pub entity_type: String,
34    pub entity_name: String,
35    #[serde(default)]
36    pub entity_line: usize,
37    pub file_path: String,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub old_entity_name: Option<String>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub old_file_path: Option<String>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub before_content: Option<String>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub after_content: Option<String>,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub commit_sha: Option<String>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub author: Option<String>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub timestamp: Option<String>,
52    /// Whether the AST structure changed (true) or only formatting/comments (false).
53    /// None when structural hash is unavailable.
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub structural_change: Option<bool>,
56}