cardano_serialization_lib/serialization/governance/
anchor.rs1use crate::serialization::utils::check_len;
2use crate::*;
3
4impl cbor_event::se::Serialize for Anchor {
5 fn serialize<'se, W: Write>(
6 &self,
7 serializer: &'se mut Serializer<W>,
8 ) -> cbor_event::Result<&'se mut Serializer<W>> {
9 serializer.write_array(cbor_event::Len::Len(2))?;
10 self.anchor_url.serialize(serializer)?;
11 self.anchor_data_hash.serialize(serializer)?;
12 Ok(serializer)
13 }
14}
15
16impl Deserialize for Anchor {
17 fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
18 (|| -> Result<_, DeserializeError> {
19 let len = raw.array()?;
20
21 check_len(len, 2, "(anchor_url, anchor_data_hash)")?;
22
23 let anchor_url = URL::deserialize(raw).map_err(|e| e.annotate("anchor_url"))?;
24
25 let anchor_data_hash =
26 AnchorDataHash::deserialize(raw).map_err(|e| e.annotate("anchor_data_hash"))?;
27
28 if let cbor_event::Len::Indefinite = len {
29 if raw.special()? != CBORSpecial::Break {
30 return Err(DeserializeFailure::EndingBreakMissing.into());
31 }
32 }
33
34 return Ok(Anchor {
35 anchor_url,
36 anchor_data_hash,
37 });
38 })()
39 .map_err(|e| e.annotate("Anchor"))
40 }
41}