use cid::Cid; use serde::{Deserialize, Deserializer, Serialize, Serializer}; pub fn cid_from_string<'de, D: Deserializer<'de>>(deserializer: D) -> Result { let str = String::deserialize(deserializer)?; Cid::try_from(str).map_err(serde::de::Error::custom) } pub fn cid_as_str(inp: &Cid, serializer: S) -> Result where S: Serializer, { inp.to_string().serialize(serializer) } #[derive(Debug, Deserialize, Serialize)] pub struct LinkRef { #[serde(rename = "$link")] link: String, } pub fn cid_as_link(inp: &Cid, serializer: S) -> Result where S: Serializer, { LinkRef { link: inp.to_string(), } .serialize(serializer) }