Skip to content

Commit

Permalink
Serialize blob ref as cid-link type
Browse files Browse the repository at this point in the history
  • Loading branch information
rudyfraser committed Sep 20, 2024
1 parent f43ffe7 commit c1064bd
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions rsky-lexicon/src/com/atproto/repo.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use crate::com::atproto::sync::{default_resource, deserialize_option_cid_v1};
use lexicon_cid::Cid;
use serde::ser::{Serializer, SerializeMap};
use serde_json::Value;

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
Expand All @@ -15,10 +16,18 @@ pub struct Record {
pub value: Value,
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct Link {
#[serde(rename(deserialize = "$link", serialize = "$link"))]
pub link: String,
fn serialize_option_cid_as_link<S>(cid_option: &Option<Cid>, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match cid_option {
Some(cid) => {
let mut map = serializer.serialize_map(Some(1))?;
map.serialize_entry("$link", &cid.to_string())?;
map.end()
}
None => serializer.serialize_none(),
}
}

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
Expand All @@ -31,7 +40,8 @@ pub struct Blob {
#[serde(
skip_serializing_if = "Option::is_none",
default = "default_resource",
deserialize_with = "deserialize_option_cid_v1"
deserialize_with = "deserialize_option_cid_v1",
serialize_with = "serialize_option_cid_as_link"
)]
pub r#ref: Option<Cid>,
#[serde(skip_serializing_if = "Option::is_none")]
Expand Down

0 comments on commit c1064bd

Please sign in to comment.