cardano_serialization_lib/serialization/governance/proposals/
voting_proposal.rs

1use crate::serialization::{check_len};
2use crate::*;
3
4impl Serialize for VotingProposal {
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(4))?;
10        self.deposit.serialize(serializer)?;
11        self.reward_account.serialize(serializer)?;
12        self.governance_action.serialize(serializer)?;
13        self.anchor.serialize(serializer)?;
14        Ok(serializer)
15    }
16}
17
18impl_deserialize_for_wrapped_tuple!(VotingProposal);
19
20impl DeserializeEmbeddedGroup for VotingProposal {
21    fn deserialize_as_embedded_group<R: BufRead + Seek>(
22        raw: &mut Deserializer<R>,
23        len: cbor_event::Len,
24    ) -> Result<Self, DeserializeError> {
25        check_len(
26            len,
27            4,
28            "(deposit, reward_account, gov_action, anchor)",
29        )?;
30
31        let deposit = Coin::deserialize(raw)
32            .map_err(|e| e.annotate("deposit"))?;
33        let reward_account = RewardAddress::deserialize(raw)
34            .map_err(|e| e.annotate("reward_account"))?;
35        let gov_action = GovernanceAction::deserialize(raw)
36            .map_err(|e| e.annotate("gov_action"))?;
37        let anchor = Anchor::deserialize(raw)
38            .map_err(|e| e.annotate("anchor"))?;
39
40        return Ok(VotingProposal {
41            deposit,
42            reward_account,
43            governance_action: gov_action,
44            anchor,
45        });
46    }
47}