1use crate::data_contract::group::{Group, GroupMemberPower};
2use crate::data_contract::GroupContractPosition;
3use bincode::{Decode, Encode};
4use derive_more::Display;
5use platform_value::Identifier;
6#[cfg(feature = "serde-conversion")]
7use serde::{Deserialize, Serialize};
8
9pub mod action_event;
10pub mod action_taker;
11pub mod group_action;
12pub mod group_action_status;
13
14#[derive(Debug, Clone, Copy, Encode, Decode, PartialEq)]
15pub enum GroupStateTransitionInfoStatus {
16 GroupStateTransitionInfoProposer(GroupContractPosition),
17 GroupStateTransitionInfoOtherSigner(GroupStateTransitionInfo),
18}
19
20impl From<GroupStateTransitionInfoStatus> for GroupStateTransitionInfo {
21 fn from(value: GroupStateTransitionInfoStatus) -> Self {
22 match value {
23 GroupStateTransitionInfoStatus::GroupStateTransitionInfoProposer(
24 group_contract_position,
25 ) => GroupStateTransitionInfo {
26 group_contract_position,
27 action_id: Default::default(),
28 action_is_proposer: true,
29 },
30 GroupStateTransitionInfoStatus::GroupStateTransitionInfoOtherSigner(info) => info,
31 }
32 }
33}
34
35#[derive(Debug, Clone, Copy, Encode, Decode, Default, PartialEq, Display)]
36#[cfg_attr(
37 feature = "serde-conversion",
38 derive(Serialize, Deserialize),
39 serde(rename_all = "camelCase")
40)]
41#[display("ID: {}, Action ID: {}", "id", "action_id")]
42pub struct GroupStateTransitionInfo {
43 #[cfg_attr(feature = "serde-conversion", serde(rename = "$groupContractPosition"))]
44 pub group_contract_position: GroupContractPosition,
45 #[cfg_attr(feature = "serde-conversion", serde(rename = "$groupActionId"))]
46 pub action_id: Identifier,
47 #[cfg_attr(feature = "serde-conversion", serde(rename = "$groupActionIsProposer"))]
49 pub action_is_proposer: bool,
50}
51
52#[derive(Debug, Clone, PartialEq)]
53pub struct GroupStateTransitionResolvedInfo {
54 pub group_contract_position: GroupContractPosition,
55 pub group: Group,
56 pub action_id: Identifier,
57 pub action_is_proposer: bool,
59 pub signer_power: GroupMemberPower,
60}