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#[derive(Debug, Clone, From)]
17pub enum BatchedTransitionAction {
18 DocumentAction(DocumentTransitionAction),
20 TokenAction(TokenTransitionAction),
22 BumpIdentityDataContractNonce(BumpIdentityDataContractNonceAction),
24}
25
26impl BatchedTransitionAction {
27 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 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 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 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 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}