use gix_hash::ObjectId; use gix_traverse::commit::{ancestors, Ancestors}; pub trait Sealed {} pub type AncestorsIter = Ancestors bool, ancestors::State>; /// 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) -> AncestorsIter where Find: for<'a> FnMut(&gix_hash::oid, &'a mut Vec) -> Result, E>, E: std::error::Error + Send + Sync + 'static; /// Infuse this object id `repo` access. fn attach(self, repo: &crate::Repository) -> crate::Id<'_>; } impl Sealed for ObjectId {} impl ObjectIdExt for ObjectId { fn ancestors(self, find: Find) -> AncestorsIter where Find: for<'a> FnMut(&gix_hash::oid, &'a mut Vec) -> Result, E>, E: std::error::Error + Send + Sync + 'static, { Ancestors::new(Some(self), ancestors::State::default(), find) } fn attach(self, repo: &crate::Repository) -> crate::Id<'_> { crate::Id::from_id(self, repo) } }