use std::fmt;
use uuid::Uuid;
#[derive(Clone, Eq, Hash, PartialEq)]
pub struct ID(Vec<u8>);
impl ID {
const PREFIX: &'static str = "0x";
pub(crate) fn generate() -> Self {
Uuid::new_v4().as_bytes().to_vec().into()
}
}
impl From<ID> for Vec<u8> {
fn from(id: ID) -> Self {
id.0
}
}
impl From<Vec<u8>> for ID {
fn from(vec: Vec<u8>) -> Self {
Self(vec)
}
}
impl fmt::Debug for ID {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "ID[{self}]")
}
}
impl fmt::Display for ID {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", Self::PREFIX)?;
self.0.iter().try_for_each(|byte| write!(f, "{byte:02x}"))
}
}