Skip to main content

dpp/voting/votes/yes_no_vote/
mod.rs

1#[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/// A masternode's answer to a yes/no vote poll (protocol version 15).
18#[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}