co_primitives/types/
weak_cid.rs1use crate::CoCid;
5use cid::{serde::BytesToCidVisitor, Cid};
6use serde::{Deserialize, Serialize};
7use std::{borrow::Borrow, ops::Deref};
8
9#[derive(Debug, Clone, Copy, Default, Hash, PartialEq, Eq, PartialOrd, Ord, schemars::JsonSchema)]
11pub struct WeakCid(#[schemars(with = "CoCid")] Cid);
12impl WeakCid {
13 pub fn new(cid: Cid) -> Self {
14 Self(cid)
15 }
16
17 pub fn cid(&self) -> Cid {
18 self.0
19 }
20}
21impl From<Cid> for WeakCid {
22 fn from(value: Cid) -> Self {
23 Self(value)
24 }
25}
26impl From<&Cid> for WeakCid {
27 fn from(value: &Cid) -> Self {
28 Self(*value)
29 }
30}
31impl From<WeakCid> for Cid {
32 fn from(value: WeakCid) -> Self {
33 value.0
34 }
35}
36impl<'de> Deserialize<'de> for WeakCid {
37 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
38 where
39 D: serde::Deserializer<'de>,
40 {
41 Ok(Self(deserializer.deserialize_bytes(BytesToCidVisitor)?))
42 }
43}
44impl Serialize for WeakCid {
45 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
46 where
47 S: serde::Serializer,
48 {
49 let mut buf = [0u8; 128];
50 let len = self
51 .0
52 .write_bytes(&mut buf[..])
53 .expect("CID to serialize to bytes and fit into 128 bytes");
54 serializer.serialize_bytes(&buf[0..len])
55 }
56}
57impl AsRef<Cid> for WeakCid {
58 fn as_ref(&self) -> &Cid {
59 &self.0
60 }
61}
62impl Borrow<Cid> for WeakCid {
63 fn borrow(&self) -> &Cid {
64 &self.0
65 }
66}
67impl Borrow<Cid> for &WeakCid {
68 fn borrow(&self) -> &Cid {
69 &self.0
70 }
71}
72impl Deref for WeakCid {
73 type Target = Cid;
74
75 fn deref(&self) -> &Self::Target {
76 &self.0
77 }
78}