use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Eq, PartialEq, Hash, Default, PartialOrd, Ord, Serialize, Deserialize)]
#[repr(transparent)]
pub struct Cid(pub [u8; 32]);
impl std::fmt::Display for Cid {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", bs58::encode(self.0).into_string())
}
}
impl std::fmt::Debug for Cid {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Cid({})", self)
}
}
impl Cid {
pub fn update(&mut self, bytes: &[u8]) {
use sha2::Digest;
let pre_hash = self.0;
let mut hasher = sha2::Sha256::new();
hasher.update(pre_hash);
hasher.update(bytes);
let result = hasher.finalize();
self.0.copy_from_slice(&result);
}
}