use git_object::tree::EntryMode;
use crate::Id;
#[derive(Debug, Clone, Copy)]
pub enum Event<'old, 'new> {
Addition {
entry_mode: git_object::tree::EntryMode,
id: Id<'new>,
},
Deletion {
entry_mode: git_object::tree::EntryMode,
id: Id<'old>,
},
Modification {
previous_entry_mode: git_object::tree::EntryMode,
previous_id: Id<'old>,
entry_mode: git_object::tree::EntryMode,
id: Id<'new>,
},
}
impl<'old, 'new> Event<'old, 'new> {
pub fn diff(
&self,
) -> Option<Result<crate::object::blob::diff::Platform<'old, 'new>, crate::object::blob::diff::init::Error>> {
match self {
Event::Modification {
previous_entry_mode: EntryMode::BlobExecutable | EntryMode::Blob,
previous_id,
entry_mode: EntryMode::BlobExecutable | EntryMode::Blob,
id,
} => Some(crate::object::blob::diff::Platform::from_ids(previous_id, id)),
_ => None,
}
}
}