drive/state_transition_action/batch/batched_transition/
mod.rs1use 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
10pub mod document_transition;
12pub mod token_transition;
14
15#[allow(clippy::large_enum_variant)]
19#[derive(Debug, Clone, From)]
20pub enum BatchedTransitionAction {
21 DocumentAction(DocumentTransitionAction),
23 TokenAction(TokenTransitionAction),
25 BumpIdentityDataContractNonce(BumpIdentityDataContractNonceAction),
27}
28
29impl BatchedTransitionAction {
30 pub fn data_contract_id(&self) -> Identifier {
32 match self {
33 BatchedTransitionAction::DocumentAction(document_action) => {
34 document_action.base().data_contract_id()
35 }
36 BatchedTransitionAction::TokenAction(token_action) => {
37 token_action.base().data_contract_id()
38 }
39 BatchedTransitionAction::BumpIdentityDataContractNonce(bump_action) => {
40 bump_action.data_contract_id()
41 }
42 }
43 }
44 pub fn as_document_action(&self) -> Result<&DocumentTransitionAction, ProtocolError> {
46 match self {
47 BatchedTransitionAction::DocumentAction(action) => Ok(action),
48 other => Err(ProtocolError::InvalidBatchedTransitionActionVariant {
49 expected: "DocumentAction",
50 found: other.variant_name(),
51 }),
52 }
53 }
54
55 pub fn as_token_action(&self) -> Result<&TokenTransitionAction, ProtocolError> {
57 match self {
58 BatchedTransitionAction::TokenAction(action) => Ok(action),
59 other => Err(ProtocolError::InvalidBatchedTransitionActionVariant {
60 expected: "TokenAction",
61 found: other.variant_name(),
62 }),
63 }
64 }
65
66 pub fn as_bump_identity_nonce_action(
68 &self,
69 ) -> Result<&BumpIdentityDataContractNonceAction, ProtocolError> {
70 match self {
71 BatchedTransitionAction::BumpIdentityDataContractNonce(action) => Ok(action),
72 other => Err(ProtocolError::InvalidBatchedTransitionActionVariant {
73 expected: "BumpIdentityDataContractNonce",
74 found: other.variant_name(),
75 }),
76 }
77 }
78
79 fn variant_name(&self) -> &'static str {
81 match self {
82 BatchedTransitionAction::DocumentAction(_) => "DocumentAction",
83 BatchedTransitionAction::TokenAction(_) => "TokenAction",
84 BatchedTransitionAction::BumpIdentityDataContractNonce(_) => {
85 "BumpIdentityDataContractNonce"
86 }
87 }
88 }
89}