use serde::Serialize;
use std::fmt;
#[derive(Serialize, Debug, Clone)]
pub struct CommitContext {
pub branch: String,
pub recent_commits: Vec<RecentCommit>,
pub staged_files: Vec<StagedFile>,
pub user_name: String,
pub user_email: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct RecentCommit {
pub hash: String,
pub message: String,
pub author: String,
pub timestamp: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct StagedFile {
pub path: String,
pub change_type: ChangeType,
pub diff: String,
pub content: Option<String>,
pub content_excluded: bool,
}
#[derive(Serialize, Debug, Clone, PartialEq, Eq)]
pub enum ChangeType {
Added,
Modified,
Deleted,
}
impl fmt::Display for ChangeType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Added => write!(f, "Added"),
Self::Modified => write!(f, "Modified"),
Self::Deleted => write!(f, "Deleted"),
}
}
}
impl CommitContext {
#[must_use]
pub fn new(
branch: String,
recent_commits: Vec<RecentCommit>,
staged_files: Vec<StagedFile>,
user_name: String,
user_email: String,
) -> Self {
Self {
branch,
recent_commits,
staged_files,
user_name,
user_email,
}
}
}