Skip to main content

dpp/voting/vote_polls/
mod.rs

1#[cfg(feature = "json-conversion")]
2use crate::serialization::JsonConvertible;
3#[cfg(feature = "value-conversion")]
4use crate::serialization::ValueConvertible;
5use crate::voting::vote_polls::contested_document_resource_vote_poll::ContestedDocumentResourceVotePoll;
6use crate::ProtocolError;
7use bincode::{Decode, Encode};
8use derive_more::From;
9use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
10use platform_value::Identifier;
11#[cfg(feature = "serde-conversion")]
12use serde::{Deserialize, Serialize};
13use std::fmt;
14
15pub mod contested_document_resource_vote_poll;
16
17#[cfg_attr(
18    all(feature = "json-conversion", feature = "serde-conversion"),
19    derive(JsonConvertible)
20)]
21#[derive(Debug, Clone, Encode, Decode, PlatformSerialize, PlatformDeserialize, PartialEq, From)]
22#[cfg_attr(
23    feature = "serde-conversion",
24    derive(Serialize, Deserialize),
25    // Internally tagged with a `$type` discriminator; inner
26    // `ContestedDocumentResourceVotePoll` fields flatten at the same level.
27    serde(tag = "$type", rename_all = "camelCase")
28)]
29#[cfg_attr(feature = "value-conversion", derive(ValueConvertible))]
30#[platform_serialize(unversioned)]
31#[platform_serialize(limit = 100000)]
32pub enum VotePoll {
33    ContestedDocumentResourceVotePoll(ContestedDocumentResourceVotePoll),
34}
35
36impl fmt::Display for VotePoll {
37    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38        match self {
39            VotePoll::ContestedDocumentResourceVotePoll(poll) => {
40                write!(f, "ContestedDocumentResourceVotePoll({})", poll)
41            }
42        }
43    }
44}
45
46impl Default for VotePoll {
47    fn default() -> Self {
48        ContestedDocumentResourceVotePoll::default().into()
49    }
50}
51
52impl VotePoll {
53    pub fn specialized_balance_id(&self) -> Result<Option<Identifier>, ProtocolError> {
54        match self {
55            VotePoll::ContestedDocumentResourceVotePoll(contested_document_resource_vote_poll) => {
56                Ok(Some(
57                    contested_document_resource_vote_poll.specialized_balance_id()?,
58                ))
59            }
60        }
61    }
62
63    pub fn unique_id(&self) -> Result<Identifier, ProtocolError> {
64        match self {
65            VotePoll::ContestedDocumentResourceVotePoll(contested_document_resource_vote_poll) => {
66                contested_document_resource_vote_poll.unique_id()
67            }
68        }
69    }
70}
71
72#[cfg(all(
73    test,
74    feature = "json-conversion",
75    feature = "value-conversion",
76    feature = "serde-conversion"
77))]
78mod json_convertible_tests_votepoll {
79    use super::*;
80
81    #[test]
82    fn json_round_trip_votepoll() {
83        use crate::serialization::JsonConvertible;
84        let original = VotePoll::default();
85        let json = original.to_json().expect("to_json");
86        let recovered = VotePoll::from_json(json).expect("from_json");
87        assert_eq!(original, recovered);
88    }
89
90    #[test]
91    fn value_round_trip_votepoll() {
92        use crate::serialization::ValueConvertible;
93        let original = VotePoll::default();
94        let value = original.to_object().expect("to_object");
95        let recovered = VotePoll::from_object(value).expect("from_object");
96        assert_eq!(original, recovered);
97    }
98}