catbuffer_rust/
embedded_transaction_helper.rs1use std::fmt::Debug;
23
24use crate::embedded_transaction_builder::EmbeddedTransactionBuilder;
25
26use super::embedded_account_address_restriction_transaction_builder::EmbeddedAccountAddressRestrictionTransactionBuilder;
27use super::embedded_account_key_link_transaction_builder::EmbeddedAccountKeyLinkTransactionBuilder;
28use super::embedded_account_metadata_transaction_builder::EmbeddedAccountMetadataTransactionBuilder;
29use super::embedded_account_mosaic_restriction_transaction_builder::EmbeddedAccountMosaicRestrictionTransactionBuilder;
30use super::embedded_account_operation_restriction_transaction_builder::EmbeddedAccountOperationRestrictionTransactionBuilder;
31use super::embedded_address_alias_transaction_builder::EmbeddedAddressAliasTransactionBuilder;
32use super::embedded_hash_lock_transaction_builder::EmbeddedHashLockTransactionBuilder;
33use super::embedded_mosaic_address_restriction_transaction_builder::EmbeddedMosaicAddressRestrictionTransactionBuilder;
34use super::embedded_mosaic_alias_transaction_builder::EmbeddedMosaicAliasTransactionBuilder;
35use super::embedded_mosaic_definition_transaction_builder::EmbeddedMosaicDefinitionTransactionBuilder;
36use super::embedded_mosaic_global_restriction_transaction_builder::EmbeddedMosaicGlobalRestrictionTransactionBuilder;
37use super::embedded_mosaic_metadata_transaction_builder::EmbeddedMosaicMetadataTransactionBuilder;
38use super::embedded_mosaic_supply_change_transaction_builder::EmbeddedMosaicSupplyChangeTransactionBuilder;
39use super::embedded_multisig_account_modification_transaction_builder::EmbeddedMultisigAccountModificationTransactionBuilder;
40use super::embedded_namespace_metadata_transaction_builder::EmbeddedNamespaceMetadataTransactionBuilder;
41use super::embedded_namespace_registration_transaction_builder::EmbeddedNamespaceRegistrationTransactionBuilder;
42use super::embedded_node_key_link_transaction_builder::EmbeddedNodeKeyLinkTransactionBuilder;
43use super::embedded_secret_lock_transaction_builder::EmbeddedSecretLockTransactionBuilder;
44use super::embedded_secret_proof_transaction_builder::EmbeddedSecretProofTransactionBuilder;
45use super::embedded_transfer_transaction_builder::EmbeddedTransferTransactionBuilder;
46use super::embedded_voting_key_link_transaction_builder::EmbeddedVotingKeyLinkTransactionBuilder;
47use super::embedded_vrf_key_link_transaction_builder::EmbeddedVrfKeyLinkTransactionBuilder;
48
49pub trait EmbeddedTransactionHelper: Debug + Send + Sync {
51 fn box_clone(&self) -> Box<dyn EmbeddedTransactionHelper>;
52 fn get_size(&self) -> usize;
53 fn serializer(&self) -> Vec<u8>;
54}
55
56impl Clone for Box<dyn EmbeddedTransactionHelper + 'static> {
57 fn clone(&self) -> Box<dyn EmbeddedTransactionHelper + 'static> {
58 self.box_clone()
59 }
60}
61
62pub fn load_from_binary(payload: &[u8]) -> Box<dyn EmbeddedTransactionHelper> {
63 let header_builder = EmbeddedTransactionBuilder::from_binary(payload);
64 let entity_type_version = header_builder.version;
65 match header_builder._type.get_value() {
66 0x414c if entity_type_version == 1 => Box::new(EmbeddedAccountKeyLinkTransactionBuilder::from_binary(payload)),
67 0x424c if entity_type_version == 1 => Box::new(EmbeddedNodeKeyLinkTransactionBuilder::from_binary(payload)),
68 0x4143 if entity_type_version == 1 => Box::new(EmbeddedVotingKeyLinkTransactionBuilder::from_binary(payload)),
69 0x4243 if entity_type_version == 1 => Box::new(EmbeddedVrfKeyLinkTransactionBuilder::from_binary(payload)),
70 0x4148 if entity_type_version == 1 => Box::new(EmbeddedHashLockTransactionBuilder::from_binary(payload)),
71 0x4152 if entity_type_version == 1 => Box::new(EmbeddedSecretLockTransactionBuilder::from_binary(payload)),
72 0x4252 if entity_type_version == 1 => Box::new(EmbeddedSecretProofTransactionBuilder::from_binary(payload)),
73 0x4144 if entity_type_version == 1 => Box::new(EmbeddedAccountMetadataTransactionBuilder::from_binary(payload)),
74 0x4244 if entity_type_version == 1 => Box::new(EmbeddedMosaicMetadataTransactionBuilder::from_binary(payload)),
75 0x4344 if entity_type_version == 1 => Box::new(EmbeddedNamespaceMetadataTransactionBuilder::from_binary(payload)),
76 0x414d if entity_type_version == 1 => Box::new(EmbeddedMosaicDefinitionTransactionBuilder::from_binary(payload)),
77 0x424d if entity_type_version == 1 => Box::new(EmbeddedMosaicSupplyChangeTransactionBuilder::from_binary(payload)),
78 0x4155 if entity_type_version == 1 => Box::new(EmbeddedMultisigAccountModificationTransactionBuilder::from_binary(payload)),
79 0x424e if entity_type_version == 1 => Box::new(EmbeddedAddressAliasTransactionBuilder::from_binary(payload)),
80 0x434e if entity_type_version == 1 => Box::new(EmbeddedMosaicAliasTransactionBuilder::from_binary(payload)),
81 0x414e if entity_type_version == 1 => Box::new(EmbeddedNamespaceRegistrationTransactionBuilder::from_binary(payload)),
82 0x4150 if entity_type_version == 1 => Box::new(EmbeddedAccountAddressRestrictionTransactionBuilder::from_binary(payload)),
83 0x4250 if entity_type_version == 1 => Box::new(EmbeddedAccountMosaicRestrictionTransactionBuilder::from_binary(payload)),
84 0x4350 if entity_type_version == 1 => Box::new(EmbeddedAccountOperationRestrictionTransactionBuilder::from_binary(payload)),
85 0x4251 if entity_type_version == 1 => Box::new(EmbeddedMosaicAddressRestrictionTransactionBuilder::from_binary(payload)),
86 0x4151 if entity_type_version == 1 => Box::new(EmbeddedMosaicGlobalRestrictionTransactionBuilder::from_binary(payload)),
87 0x4154 if entity_type_version == 1 => Box::new(EmbeddedTransferTransactionBuilder::from_binary(payload)),
88 _ => panic!()
89 }
90}