1use cid::Cid;
2use serde::{Deserialize, Deserializer, Serialize, Serializer};
3
4pub fn cid_from_string<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Cid, D::Error> {
5 let str = String::deserialize(deserializer)?;
6
7 Cid::try_from(str).map_err(serde::de::Error::custom)
8}
9
10pub fn cid_as_str<S>(inp: &Cid, serializer: S) -> Result<S::Ok, S::Error>
11where
12 S: Serializer,
13{
14 inp.to_string().serialize(serializer)
15}
16
17#[derive(Debug, Deserialize, Serialize)]
18pub struct LinkRef {
19 #[serde(rename = "$link")]
20 link: String,
21}
22
23pub fn cid_as_link<S>(inp: &Cid, serializer: S) -> Result<S::Ok, S::Error>
24where
25 S: Serializer,
26{
27 LinkRef {
28 link: inp.to_string(),
29 }
30 .serialize(serializer)
31}