dpp/voting/vote_polls/
mod.rs1#[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 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}