use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ChangeType {
Added,
Modified,
Deleted,
Moved,
Renamed,
}
impl std::fmt::Display for ChangeType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ChangeType::Added => write!(f, "added"),
ChangeType::Modified => write!(f, "modified"),
ChangeType::Deleted => write!(f, "deleted"),
ChangeType::Moved => write!(f, "moved"),
ChangeType::Renamed => write!(f, "renamed"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SemanticChange {
pub id: String,
pub entity_id: String,
pub change_type: ChangeType,
pub entity_type: String,
pub entity_name: String,
#[serde(default)]
pub entity_line: usize,
pub file_path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub old_entity_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub old_file_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub before_content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after_content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub commit_sha: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub structural_change: Option<bool>,
}