use crate::{consts::DAG_CBOR, Error, Unit};
use libipld::{
cbor::DagCborCodec,
multihash::{Code, MultihashDigest},
prelude::Codec,
Cid, Ipld,
};
pub trait DagCbor
where
Self: Sized,
Ipld: From<Self>,
{
fn to_cid(self) -> Result<Cid, Error<Unit>> {
let ipld: Ipld = self.into();
let bytes = DagCborCodec.encode(&ipld)?;
let hash = Code::Sha3_256.digest(&bytes);
Ok(Cid::new_v1(DAG_CBOR, hash))
}
}
pub trait DagCborRef
where
Self: Sized,
for<'a> Ipld: From<&'a Self>,
{
fn to_cid(&self) -> Result<Cid, Error<Unit>> {
let ipld: Ipld = self.into();
let bytes = DagCborCodec.encode(&ipld)?;
let hash = Code::Sha3_256.digest(&bytes);
Ok(Cid::new_v1(DAG_CBOR, hash))
}
}