use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq)] pub struct ObjectId(pub String); impl ObjectId { pub fn new(hex: impl AsRef) -> Self { Self(hex.as_ref().to_lowercase()) } pub fn as_str(&self) -> &str { &self.0 } } impl std::fmt::Display for ObjectId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0) } } impl AsRef for ObjectId { fn as_ref(&self) -> &str { &self.0 } } impl TryFrom<&ObjectId> for gix::hash::ObjectId { type Error = crate::errors::GitError; fn try_from(id: &ObjectId) -> Result { gix::hash::ObjectId::from_hex(id.as_str().as_bytes()).map_err(|e| { crate::errors::GitError::InvalidOid(format!("invalid hex oid: {e}")) }) } }