catbuffer_rust/
entity_type_dto.rs

1/*
2 * // Copyright (c) 2016-2019, Jaguar0625, gimre, BloodyRookie, Tech Bureau, Corp.
3 * // Copyright (c) 2020-present, Jaguar0625, gimre, BloodyRookie.
4 * // All rights reserved.
5 * //
6 * // This file is part of Catapult.
7 * //
8 * // Catapult is free software: you can redistribute it and/or modify
9 * // it under the terms of the GNU Lesser General Public License as published by
10 * // the Free Software Foundation, either version 3 of the License, or
11 * // (at your option) any later version.
12 * //
13 * // Catapult is distributed in the hope that it will be useful,
14 * // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * // GNU Lesser General Public License for more details.
17 * //
18 * // You should have received a copy of the GNU Lesser General Public License
19 * // along with Catapult. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22use num_derive::{FromPrimitive, ToPrimitive};
23use num_traits::{FromPrimitive, ToPrimitive};
24use strum_macros::EnumIter;
25
26use super::generator_utils::*;
27
28/// Enumeration of entity types.
29#[allow(non_camel_case_types)]
30#[repr(u16)]
31#[derive(Debug, Clone, Copy, PartialEq, FromPrimitive, ToPrimitive, EnumIter)]
32pub enum EntityTypeDto {
33    /// Reserved entity type.
34    RESERVED = 0,
35
36    /// Nemesis block header.
37    NEMESIS_BLOCK_HEADER = 32835,
38
39    /// Normal block header.
40    NORMAL_BLOCK_HEADER = 33091,
41
42    /// Importance block header.
43    IMPORTANCE_BLOCK_HEADER = 33347,
44
45    /// Account key link transaction.
46    ACCOUNT_KEY_LINK_TRANSACTION = 16716,
47
48    // /// Embedded account key link transaction.
49    // EMBEDDED_ACCOUNT_KEY_LINK_TRANSACTION = 16716,
50
51    /// Node key link transaction.
52    NODE_KEY_LINK_TRANSACTION = 16972,
53
54    // /// Embedded node key link transaction.
55    // EMBEDDED_NODE_KEY_LINK_TRANSACTION = 16972,
56
57    /// Aggregate complete transaction.
58    AGGREGATE_COMPLETE_TRANSACTION = 16705,
59
60    /// Aggregate bonded transaction.
61    AGGREGATE_BONDED_TRANSACTION = 16961,
62
63    /// Voting key link transaction.
64    VOTING_KEY_LINK_TRANSACTION = 16707,
65
66    // /// Embedded voting key link transaction.
67    // EMBEDDED_VOTING_KEY_LINK_TRANSACTION = 16707,
68
69    /// Vrf key link transaction.
70    VRF_KEY_LINK_TRANSACTION = 16963,
71
72    // /// Embedded vrf key link transaction.
73    // EMBEDDED_VRF_KEY_LINK_TRANSACTION = 16963,
74
75    /// Hash lock transaction.
76    HASH_LOCK_TRANSACTION = 16712,
77
78    // /// Embedded hash lock transaction.
79    // EMBEDDED_HASH_LOCK_TRANSACTION = 16712,
80
81    /// Secret lock transaction.
82    SECRET_LOCK_TRANSACTION = 16722,
83
84    // /// Embedded secret lock transaction.
85    // EMBEDDED_SECRET_LOCK_TRANSACTION = 16722,
86
87    /// Secret proof transaction.
88    SECRET_PROOF_TRANSACTION = 16978,
89
90    // /// Embedded secret proof transaction.
91    // EMBEDDED_SECRET_PROOF_TRANSACTION = 16978,
92
93    /// Account metadata transaction.
94    ACCOUNT_METADATA_TRANSACTION = 16708,
95
96    // /// Embedded account metadata transaction.
97    // EMBEDDED_ACCOUNT_METADATA_TRANSACTION = 16708,
98
99    /// Mosaic metadata transaction.
100    MOSAIC_METADATA_TRANSACTION = 16964,
101
102    // /// Embedded mosaic metadata transaction.
103    // EMBEDDED_MOSAIC_METADATA_TRANSACTION = 16964,
104
105    /// Namespace metadata transaction.
106    NAMESPACE_METADATA_TRANSACTION = 17220,
107
108    // /// Embedded namespace metadata transaction.
109    // EMBEDDED_NAMESPACE_METADATA_TRANSACTION = 17220,
110
111    /// Mosaic definition transaction.
112    MOSAIC_DEFINITION_TRANSACTION = 16717,
113
114    // /// Embedded mosaic definition transaction.
115    // EMBEDDED_MOSAIC_DEFINITION_TRANSACTION = 16717,
116
117    /// Mosaic supply change transaction.
118    MOSAIC_SUPPLY_CHANGE_TRANSACTION = 16973,
119
120    // /// Embedded mosaic supply change transaction.
121    // EMBEDDED_MOSAIC_SUPPLY_CHANGE_TRANSACTION = 16973,
122
123    /// Multisig account modification transaction.
124    MULTISIG_ACCOUNT_MODIFICATION_TRANSACTION = 16725,
125
126    // /// Embedded multisig account modification transaction.
127    // EMBEDDED_MULTISIG_ACCOUNT_MODIFICATION_TRANSACTION = 16725,
128
129    /// Address alias transaction.
130    ADDRESS_ALIAS_TRANSACTION = 16974,
131
132    // /// Embedded address alias transaction.
133    // EMBEDDED_ADDRESS_ALIAS_TRANSACTION = 16974,
134
135    /// Mosaic alias transaction.
136    MOSAIC_ALIAS_TRANSACTION = 17230,
137
138    // /// Embedded mosaic alias transaction.
139    // EMBEDDED_MOSAIC_ALIAS_TRANSACTION = 17230,
140
141    /// Namespace registration transaction.
142    NAMESPACE_REGISTRATION_TRANSACTION = 16718,
143
144    // /// Embedded namespace registration transaction.
145    // EMBEDDED_NAMESPACE_REGISTRATION_TRANSACTION = 16718,
146
147    /// Account address restriction transaction.
148    ACCOUNT_ADDRESS_RESTRICTION_TRANSACTION = 16720,
149
150    // /// Embedded account address restriction transaction.
151    // EMBEDDED_ACCOUNT_ADDRESS_RESTRICTION_TRANSACTION = 16720,
152
153    /// Account mosaic restriction transaction.
154    ACCOUNT_MOSAIC_RESTRICTION_TRANSACTION = 16976,
155
156    // /// Embedded account mosaic restriction transaction.
157    // EMBEDDED_ACCOUNT_MOSAIC_RESTRICTION_TRANSACTION = 16976,
158
159    /// Account operation restriction transaction.
160    ACCOUNT_OPERATION_RESTRICTION_TRANSACTION = 17232,
161
162    // /// Embedded account operation restriction transaction.
163    // EMBEDDED_ACCOUNT_OPERATION_RESTRICTION_TRANSACTION = 17232,
164
165    /// Mosaic address restriction transaction.
166    MOSAIC_ADDRESS_RESTRICTION_TRANSACTION = 16977,
167
168    // /// Embedded mosaic address restriction transaction.
169    // EMBEDDED_MOSAIC_ADDRESS_RESTRICTION_TRANSACTION = 16977,
170
171    /// Mosaic global restriction transaction.
172    MOSAIC_GLOBAL_RESTRICTION_TRANSACTION = 16721,
173
174    // /// Embedded mosaic global restriction transaction.
175    // EMBEDDED_MOSAIC_GLOBAL_RESTRICTION_TRANSACTION = 16721,
176
177    /// Transfer transaction.
178    TRANSFER_TRANSACTION = 16724,
179
180    // /// Embedded transfer transaction.
181    // EMBEDDED_TRANSFER_TRANSACTION = 16724,
182}
183
184impl EntityTypeDto {
185    pub const LENGTH: usize = std::mem::size_of::<Self>();
186
187    /// Gets the size of the type.
188    ///
189    /// # Returns
190    ///
191    /// A usize.
192    pub fn get_size(&self) -> usize {
193        Self::LENGTH
194    }
195
196    /// Gets the value of the enum.
197    ///
198    /// # Returns
199    ///
200    /// A u16
201    pub fn get_value(&self) -> u16 {
202        self.to_u16().unwrap()
203    }
204
205
206    /// Creates an `EntityTypeDto` from a slice.
207    ///
208    /// # Returns
209    ///
210    /// A `EntityTypeDto`.
211    pub fn from_binary(src: &[u8]) -> Self {
212        // assert_eq!(src.len(), Self::LENGTH);
213        let buf = fixed_bytes::<{ Self::LENGTH }>(src);
214        Self::from_u16(u16::from_le_bytes(buf)).unwrap()
215    }
216
217    /// Serializes an type to bytes.
218    ///
219    /// # Returns
220    ///
221    /// A Serialized bytes.
222    pub fn serializer(&self) -> Vec<u8> {
223        self.get_value().to_le_bytes().to_vec()
224    }
225}