use crate::sealed::Sealed;
#[cfg(doc)]
use crate::GitOid;
pub trait ObjectType: Sealed {
#[doc(hidden)]
const NAME: &'static str;
}
macro_rules! define_object_type {
( $name:tt, $s:literal ) => {
impl Sealed for $name {}
impl ObjectType for $name {
const NAME: &'static str = $s;
}
};
}
pub struct Blob {
#[doc(hidden)]
_private: (),
}
define_object_type!(Blob, "blob");
pub struct Tree {
#[doc(hidden)]
_private: (),
}
define_object_type!(Tree, "tree");
pub struct Tag {
#[doc(hidden)]
_private: (),
}
define_object_type!(Tag, "tag");
pub struct Commit {
_private: (),
}
define_object_type!(Commit, "commit");