#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum VcsBackend {
Git,
Jj,
}
impl VcsBackend {
pub fn as_str(&self) -> &'static str {
match self {
VcsBackend::Git => "git",
VcsBackend::Jj => "jj",
}
}
}
impl std::fmt::Display for VcsBackend {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct GitSnapshot {
pub branch: Option<String>,
pub head: Option<String>,
pub dirty: bool,
pub vcs_backend: VcsBackend,
pub staged: Vec<String>,
pub modified: Vec<String>,
pub deleted: Vec<String>,
pub renamed: Vec<RenamedFile>,
pub untracked: Vec<String>,
pub changed_files: Vec<String>,
pub diff_stats: Option<DiffStats>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct DiffStats {
pub files: i64,
pub insertions: i64,
pub deletions: i64,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct RenamedFile {
pub from: String,
pub to: String,
}