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}