drive/state_transition_action/batch/batched_transition/
mod.rs

1use derive_more::From;
2use dpp::identifier::Identifier;
3use dpp::ProtocolError;
4use crate::state_transition_action::batch::batched_transition::document_transition::document_base_transition_action::DocumentBaseTransitionActionAccessorsV0;
5use crate::state_transition_action::batch::batched_transition::document_transition::DocumentTransitionAction;
6use crate::state_transition_action::batch::batched_transition::token_transition::token_base_transition_action::TokenBaseTransitionActionAccessorsV0;
7use crate::state_transition_action::batch::batched_transition::token_transition::TokenTransitionAction;
8use crate::state_transition_action::system::bump_identity_data_contract_nonce_action::{BumpIdentityDataContractNonceAction, BumpIdentityDataContractNonceActionAccessorsV0};
9
10/// document transition
11pub mod document_transition;
12/// token transition
13pub mod token_transition;
14
15/// token action
16#[derive(Debug, Clone, From)]
17pub enum BatchedTransitionAction {
18    /// document
19    DocumentAction(DocumentTransitionAction),
20    /// token
21    TokenAction(TokenTransitionAction),
22    /// bump identity data contract nonce
23    BumpIdentityDataContractNonce(BumpIdentityDataContractNonceAction),
24}
25
26impl BatchedTransitionAction {
27    /// Helper method to get the data contract id
28    pub fn data_contract_id(&self) -> Identifier {
29        match self {
30            BatchedTransitionAction::DocumentAction(document_action) => {
31                document_action.base().data_contract_id()
32            }
33            BatchedTransitionAction::TokenAction(token_action) => {
34                token_action.base().data_contract_id()
35            }
36            BatchedTransitionAction::BumpIdentityDataContractNonce(bump_action) => {
37                bump_action.data_contract_id()
38            }
39        }
40    }
41    /// as_document_action
42    pub fn as_document_action(&self) -> Result<&DocumentTransitionAction, ProtocolError> {
43        match self {
44            BatchedTransitionAction::DocumentAction(action) => Ok(action),
45            other => Err(ProtocolError::InvalidBatchedTransitionActionVariant {
46                expected: "DocumentAction",
47                found: other.variant_name(),
48            }),
49        }
50    }
51
52    /// as_token_action
53    pub fn as_token_action(&self) -> Result<&TokenTransitionAction, ProtocolError> {
54        match self {
55            BatchedTransitionAction::TokenAction(action) => Ok(action),
56            other => Err(ProtocolError::InvalidBatchedTransitionActionVariant {
57                expected: "TokenAction",
58                found: other.variant_name(),
59            }),
60        }
61    }
62
63    /// as_bump_identity_nonce_action
64    pub fn as_bump_identity_nonce_action(
65        &self,
66    ) -> Result<&BumpIdentityDataContractNonceAction, ProtocolError> {
67        match self {
68            BatchedTransitionAction::BumpIdentityDataContractNonce(action) => Ok(action),
69            other => Err(ProtocolError::InvalidBatchedTransitionActionVariant {
70                expected: "BumpIdentityDataContractNonce",
71                found: other.variant_name(),
72            }),
73        }
74    }
75
76    /// Helper method to get the variant name for diagnostics.
77    fn variant_name(&self) -> &'static str {
78        match self {
79            BatchedTransitionAction::DocumentAction(_) => "DocumentAction",
80            BatchedTransitionAction::TokenAction(_) => "TokenAction",
81            BatchedTransitionAction::BumpIdentityDataContractNonce(_) => {
82                "BumpIdentityDataContractNonce"
83            }
84        }
85    }
86}