dpp/data_contract/group/
mod.rs

1use crate::data_contract::group::accessors::v0::{GroupV0Getters, GroupV0Setters};
2use crate::data_contract::group::methods::v0::GroupMethodsV0;
3use crate::data_contract::group::v0::GroupV0;
4use crate::data_contract::GroupContractPosition;
5use crate::errors::ProtocolError;
6#[cfg(feature = "json-conversion")]
7use crate::serialization::JsonConvertible;
8#[cfg(feature = "value-conversion")]
9use crate::serialization::ValueConvertible;
10use crate::validation::SimpleConsensusValidationResult;
11use bincode::{Decode, Encode};
12use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
13use platform_value::Identifier;
14use platform_version::version::PlatformVersion;
15use serde::{Deserialize, Serialize};
16use std::collections::BTreeMap;
17
18pub mod accessors;
19pub(crate) mod methods;
20pub mod v0;
21
22pub type RequiredSigners = u8;
23
24pub type GroupMemberPower = u32;
25pub type GroupSumPower = u32;
26pub type GroupRequiredPower = u32;
27#[cfg_attr(feature = "json-conversion", derive(JsonConvertible))]
28#[cfg_attr(feature = "value-conversion", derive(ValueConvertible))]
29#[derive(
30    Serialize,
31    Deserialize,
32    Decode,
33    Encode,
34    PlatformSerialize,
35    PlatformDeserialize,
36    Debug,
37    Clone,
38    PartialEq,
39    Eq,
40)]
41#[platform_serialize(unversioned)]
42#[serde(tag = "$formatVersion")]
43pub enum Group {
44    #[serde(rename = "0")]
45    V0(GroupV0),
46}
47
48impl GroupV0Getters for Group {
49    fn member_power(&self, member_id: Identifier) -> Result<u32, ProtocolError> {
50        match self {
51            Group::V0(group_v0) => group_v0.member_power(member_id),
52        }
53    }
54    fn members(&self) -> &BTreeMap<Identifier, u32> {
55        match self {
56            Group::V0(group_v0) => group_v0.members(),
57        }
58    }
59
60    fn members_mut(&mut self) -> &mut BTreeMap<Identifier, u32> {
61        match self {
62            Group::V0(group_v0) => group_v0.members_mut(),
63        }
64    }
65
66    fn required_power(&self) -> GroupRequiredPower {
67        match self {
68            Group::V0(group_v0) => group_v0.required_power(),
69        }
70    }
71}
72
73impl GroupV0Setters for Group {
74    fn set_members(&mut self, members: BTreeMap<Identifier, u32>) {
75        match self {
76            Group::V0(group_v0) => group_v0.set_members(members),
77        }
78    }
79
80    fn set_member_power(&mut self, member_id: Identifier, power: u32) {
81        match self {
82            Group::V0(group_v0) => group_v0.set_member_power(member_id, power),
83        }
84    }
85
86    fn remove_member(&mut self, member_id: &Identifier) -> bool {
87        match self {
88            Group::V0(group_v0) => group_v0.remove_member(member_id),
89        }
90    }
91
92    fn set_required_power(&mut self, required_power: GroupRequiredPower) {
93        match self {
94            Group::V0(group_v0) => group_v0.set_required_power(required_power),
95        }
96    }
97}
98
99impl GroupMethodsV0 for Group {
100    fn validate(
101        &self,
102        group_contract_position: Option<GroupContractPosition>,
103        platform_version: &PlatformVersion,
104    ) -> Result<SimpleConsensusValidationResult, ProtocolError> {
105        match self {
106            Group::V0(group_v0) => group_v0.validate(group_contract_position, platform_version),
107        }
108    }
109}