dpp/voting/votes/yes_no_vote/
mod.rs1#[cfg(feature = "json-conversion")]
2use crate::serialization::JsonConvertible;
3#[cfg(feature = "value-conversion")]
4use crate::serialization::ValueConvertible;
5use crate::voting::votes::yes_no_vote::v0::YesNoVoteV0;
6use crate::ProtocolError;
7use bincode::{Decode, DecodeUntrusted, Encode};
8use platform_serialization_derive::{
9 PlatformDeserializeTrusted, PlatformDeserializeUntrusted, PlatformSerialize,
10};
11#[cfg(feature = "serde-conversion")]
12use serde::{Deserialize, Serialize};
13
14pub mod accessors;
15pub mod v0;
16
17#[cfg_attr(
19 all(feature = "json-conversion", feature = "serde-conversion"),
20 derive(JsonConvertible)
21)]
22#[derive(
23 Debug,
24 Clone,
25 Encode,
26 Decode,
27 PlatformSerialize,
28 PlatformDeserializeTrusted,
29 PlatformDeserializeUntrusted,
30 PartialEq,
31 Eq,
32 DecodeUntrusted,
33)]
34#[cfg_attr(
35 feature = "serde-conversion",
36 derive(Serialize, Deserialize),
37 serde(tag = "$formatVersion")
38)]
39#[cfg_attr(feature = "value-conversion", derive(ValueConvertible))]
40#[platform_serialize(limit = 15000, unversioned)]
41pub enum YesNoVote {
42 #[cfg_attr(feature = "serde-conversion", serde(rename = "0"))]
43 V0(YesNoVoteV0),
44}
45
46#[cfg(all(
47 test,
48 feature = "json-conversion",
49 feature = "value-conversion",
50 feature = "serde-conversion"
51))]
52mod json_convertible_tests_yes_no_vote {
53 use super::*;
54 use crate::voting::vote_choices::yes_no_abstain_vote_choice::YesNoAbstainVoteChoice;
55 use platform_value::{platform_value, Identifier};
56 use serde_json::json;
57
58 fn fixture() -> YesNoVote {
59 YesNoVote::V0(YesNoVoteV0 {
60 vote_poll_id: Identifier::new([0xc1; 32]),
61 vote_choice: YesNoAbstainVoteChoice::Yes,
62 })
63 }
64
65 #[test]
66 fn json_round_trip_with_full_wire_shape() {
67 use crate::serialization::JsonConvertible;
68 let original = fixture();
69 let json = original.to_json().expect("to_json");
70 assert_eq!(
71 json,
72 json!({
73 "$formatVersion": "0",
74 "votePollId": Identifier::new([0xc1; 32]).to_string(platform_value::string_encoding::Encoding::Base58),
75 "voteChoice": "yes",
76 })
77 );
78 let recovered = YesNoVote::from_json(json).expect("from_json");
79 assert_eq!(original, recovered);
80 }
81
82 #[test]
83 fn value_round_trip_with_full_wire_shape() {
84 use crate::serialization::ValueConvertible;
85 let original = fixture();
86 let value = original.to_object().expect("to_object");
87 assert_eq!(
88 value,
89 platform_value!({
90 "$formatVersion": "0",
91 "votePollId": Identifier::new([0xc1; 32]),
92 "voteChoice": "yes",
93 })
94 );
95 let recovered = YesNoVote::from_object(value).expect("from_object");
96 assert_eq!(original, recovered);
97 }
98}