this repo has no description
1use crate::state::AppState; 2use crate::sync::firehose::SequencedEvent; 3use crate::sync::frame::{CommitFrame, Frame, FrameData}; 4use cid::Cid; 5use jacquard_repo::car::write_car_bytes; 6use jacquard_repo::storage::BlockStore; 7use std::str::FromStr; 8 9pub async fn format_event_for_sending( 10 state: &AppState, 11 event: SequencedEvent, 12) -> Result<Vec<u8>, anyhow::Error> { 13 let block_cids_str = event.blocks_cids.clone().unwrap_or_default(); 14 let mut frame: CommitFrame = event.try_into() 15 .map_err(|e| anyhow::anyhow!("Invalid event: {}", e))?; 16 17 let car_bytes = if !block_cids_str.is_empty() { 18 let mut blocks = std::collections::BTreeMap::new(); 19 20 for cid_str in block_cids_str { 21 let cid = Cid::from_str(&cid_str)?; 22 let data = state 23 .block_store 24 .get(&cid) 25 .await? 26 .ok_or_else(|| anyhow::anyhow!("Block not found: {}", cid))?; 27 blocks.insert(cid, data); 28 } 29 30 let root = Cid::from_str(&frame.commit)?; 31 write_car_bytes(root, blocks).await? 32 } else { 33 Vec::new() 34 }; 35 frame.blocks = car_bytes; 36 37 let frame = Frame { 38 op: 1, 39 data: FrameData::Commit(Box::new(frame)), 40 }; 41 42 let mut bytes = Vec::new(); 43 serde_ipld_dagcbor::to_writer(&mut bytes, &frame)?; 44 Ok(bytes) 45}