use git_hash::ObjectId; use git_traverse::commit::{ancestors, Ancestors}; use crate::easy; pub trait Sealed {} /// An extension trait to add functionality to [`ObjectId`]s. pub trait ObjectIdExt: Sealed { /// Create an iterator over the ancestry of the commits reachable from this id, which must be a commit. fn ancestors(self, find: Find) -> Ancestors bool, ancestors::State> where Find: for<'a> FnMut(&git_hash::oid, &'a mut Vec) -> Option>; /// Infuse this object id with an [`easy::Access`]. fn attach(self, access: &A) -> easy::Oid<'_, A>; } impl Sealed for ObjectId {} impl ObjectIdExt for ObjectId { fn ancestors(self, find: Find) -> Ancestors bool, ancestors::State> where Find: for<'a> FnMut(&git_hash::oid, &'a mut Vec) -> Option>, { Ancestors::new(Some(self), ancestors::State::default(), find) } fn attach(self, access: &A) -> easy::Oid<'_, A> { easy::Oid::from_id(self, access) } }