rain_metadata/meta/
magic.rs1#[derive(
3 serde::Serialize,
4 Clone,
5 Copy,
6 strum::EnumIter,
7 strum::EnumString,
8 strum::Display,
9 Debug,
10 PartialEq,
11 serde::Deserialize,
12)]
13#[strum(serialize_all = "kebab_case")]
14#[serde(rename_all = "kebab-case")]
15#[repr(u64)]
16pub enum KnownMagic {
17 RainMetaDocumentV1 = 0xff0a89c674ee7874,
19
20 OpMetaV1 = 0xffe5282f43e495b4,
22 DotrainV1 = 0xffdac2f2f37be894,
24 RainlangV1 = 0xff1c198cec3b48a7,
26 SolidityAbiV2 = 0xffe5ffb4a3ff2cde,
28 AuthoringMetaV1 = 0xffe9e3a02ca8e235,
30 AuthoringMetaV2 = 0xff52fe42f1a05093,
32 InterpreterCallerMetaV1 = 0xffc21bbf86cc199b,
34 ExpressionDeployerV2BytecodeV1 = 0xffdb988a8cd04d32,
36 RainlangSourceV1 = 0xff13109e41336ff2,
38 AddressList = 0xffb2637608c09e38,
40 DotrainSourceV1 = 0xffa15ef0fc437099,
42 OrderBuilderStateV1 = 0xffda7b2fb167c286,
44 RaindexSignedContextOracleV1 = 0xff7a1507ba4419ca,
48 OaSchema = 0xffa8e8a9b9cf4a31,
50 OaHashList = 0xff9fae3cc645f463,
52 OaStructure = 0xffc47a6299e8a911,
54 OaTokenImage = 0xff8cd2927c8c86cb,
56 OaTokenCredentialLinks = 0xffbc38eb14ad2209,
58}
59
60impl KnownMagic {
61 pub fn to_prefix_bytes(&self) -> [u8; 8] {
62 (*self as u64).to_be_bytes()
64 }
65}
66
67impl TryFrom<u64> for KnownMagic {
68 type Error = crate::error::Error;
69 fn try_from(value: u64) -> Result<Self, Self::Error> {
70 match value {
71 v if v == KnownMagic::OpMetaV1 as u64 => Ok(KnownMagic::OpMetaV1),
72 v if v == KnownMagic::DotrainV1 as u64 => Ok(KnownMagic::DotrainV1),
73 v if v == KnownMagic::RainlangV1 as u64 => Ok(KnownMagic::RainlangV1),
74 v if v == KnownMagic::SolidityAbiV2 as u64 => Ok(KnownMagic::SolidityAbiV2),
75 v if v == KnownMagic::AuthoringMetaV1 as u64 => Ok(KnownMagic::AuthoringMetaV1),
76 v if v == KnownMagic::AuthoringMetaV2 as u64 => Ok(KnownMagic::AuthoringMetaV2),
77 v if v == KnownMagic::AddressList as u64 => Ok(KnownMagic::AddressList),
78 v if v == KnownMagic::RainMetaDocumentV1 as u64 => Ok(KnownMagic::RainMetaDocumentV1),
79 v if v == KnownMagic::InterpreterCallerMetaV1 as u64 => {
80 Ok(KnownMagic::InterpreterCallerMetaV1)
81 }
82 v if v == KnownMagic::ExpressionDeployerV2BytecodeV1 as u64 => {
83 Ok(KnownMagic::ExpressionDeployerV2BytecodeV1)
84 }
85 v if v == KnownMagic::RainlangSourceV1 as u64 => Ok(KnownMagic::RainlangSourceV1),
86 v if v == KnownMagic::DotrainSourceV1 as u64 => Ok(KnownMagic::DotrainSourceV1),
87 v if v == KnownMagic::OrderBuilderStateV1 as u64 => Ok(KnownMagic::OrderBuilderStateV1),
88 v if v == KnownMagic::RaindexSignedContextOracleV1 as u64 => {
89 Ok(KnownMagic::RaindexSignedContextOracleV1)
90 }
91 v if v == KnownMagic::OaSchema as u64 => Ok(KnownMagic::OaSchema),
92 v if v == KnownMagic::OaHashList as u64 => Ok(KnownMagic::OaHashList),
93 v if v == KnownMagic::OaStructure as u64 => Ok(KnownMagic::OaStructure),
94 v if v == KnownMagic::OaTokenImage as u64 => Ok(KnownMagic::OaTokenImage),
95 v if v == KnownMagic::OaTokenCredentialLinks as u64 => {
96 Ok(KnownMagic::OaTokenCredentialLinks)
97 }
98 _ => Err(crate::error::Error::UnknownMagic),
99 }
100 }
101}
102
103#[cfg(test)]
104mod tests {
105 use super::KnownMagic;
106 use alloy::primitives::hex;
107
108 #[test]
109 fn test_rain_meta_document_v1() {
110 let magic_number = KnownMagic::RainMetaDocumentV1;
111 let magic_number_after_prefix = magic_number.to_prefix_bytes();
112
113 assert_eq!(hex::encode(magic_number_after_prefix), "ff0a89c674ee7874");
114 }
115
116 #[test]
117 fn test_solidity_abi_v2() {
118 let magic_number = KnownMagic::SolidityAbiV2;
119 let magic_number_after_prefix = magic_number.to_prefix_bytes();
120
121 assert_eq!(hex::encode(magic_number_after_prefix), "ffe5ffb4a3ff2cde");
122 }
123
124 #[test]
125 fn test_op_meta_v1() {
126 let magic_number = KnownMagic::OpMetaV1;
127 let magic_number_after_prefix = magic_number.to_prefix_bytes();
128
129 assert_eq!(hex::encode(magic_number_after_prefix), "ffe5282f43e495b4");
130 }
131
132 #[test]
133 fn test_interpreter_caller_meta_v1() {
134 let magic_number = KnownMagic::InterpreterCallerMetaV1;
135 let magic_number_after_prefix = magic_number.to_prefix_bytes();
136
137 assert_eq!(hex::encode(magic_number_after_prefix), "ffc21bbf86cc199b");
138 }
139
140 #[test]
141 fn test_authoring_meta_v1() {
142 let magic_number = KnownMagic::AuthoringMetaV1;
143 let magic_number_after_prefix = magic_number.to_prefix_bytes();
144
145 assert_eq!(hex::encode(magic_number_after_prefix), "ffe9e3a02ca8e235");
146 }
147
148 #[test]
149 fn test_authoring_meta_v2() {
150 let magic_number = KnownMagic::AuthoringMetaV2;
151 let magic_number_after_prefix = magic_number.to_prefix_bytes();
152
153 assert_eq!(hex::encode(magic_number_after_prefix), "ff52fe42f1a05093");
154 }
155
156 #[test]
157 fn test_dotrain_meta_v1() {
158 let magic_number = KnownMagic::DotrainV1;
159 let magic_number_after_prefix = magic_number.to_prefix_bytes();
160
161 assert_eq!(hex::encode(magic_number_after_prefix), "ffdac2f2f37be894");
162 }
163
164 #[test]
165 fn test_rainlang_meta_v1() {
166 let magic_number = KnownMagic::RainlangV1;
167 let magic_number_after_prefix = magic_number.to_prefix_bytes();
168
169 assert_eq!(hex::encode(magic_number_after_prefix), "ff1c198cec3b48a7");
170 }
171
172 #[test]
173 fn test_expression_deployer_v2_bytecode_meta_v1() {
174 let magic_number = KnownMagic::ExpressionDeployerV2BytecodeV1;
175 let magic_number_after_prefix = magic_number.to_prefix_bytes();
176
177 assert_eq!(hex::encode(magic_number_after_prefix), "ffdb988a8cd04d32");
178 }
179
180 #[test]
181 fn test_rainlang_source_meta_v1() {
182 let magic_number = KnownMagic::RainlangSourceV1;
183 let magic_number_after_prefix = magic_number.to_prefix_bytes();
184
185 assert_eq!(hex::encode(magic_number_after_prefix), "ff13109e41336ff2");
186 }
187
188 #[test]
189 fn test_dotrain_source_meta_v1() {
190 let magic_number = KnownMagic::DotrainSourceV1;
191 let magic_number_after_prefix = magic_number.to_prefix_bytes();
192
193 assert_eq!(hex::encode(magic_number_after_prefix), "ffa15ef0fc437099");
194 }
195
196 #[test]
197 fn test_dotrain_instance_meta_v1() {
198 let magic_number = KnownMagic::OrderBuilderStateV1;
199 let magic_number_after_prefix = magic_number.to_prefix_bytes();
200
201 assert_eq!(hex::encode(magic_number_after_prefix), "ffda7b2fb167c286");
202 }
203
204 #[test]
205 fn test_signed_context_oracle_v1() {
206 let magic_number = KnownMagic::RaindexSignedContextOracleV1;
207 let magic_number_after_prefix = magic_number.to_prefix_bytes();
208
209 assert_eq!(hex::encode(magic_number_after_prefix), "ff7a1507ba4419ca");
210 }
211
212 #[test]
213 fn test_signed_context_oracle_v1_roundtrip() {
214 let magic_number = KnownMagic::RaindexSignedContextOracleV1;
215 let from_u64 = KnownMagic::try_from(magic_number as u64).unwrap();
216 assert_eq!(magic_number, from_u64);
217 }
218
219 #[test]
220 fn test_oa_schema() {
221 let magic_number = KnownMagic::OaSchema;
222 let magic_number_after_prefix = magic_number.to_prefix_bytes();
223
224 assert_eq!(hex::encode(magic_number_after_prefix), "ffa8e8a9b9cf4a31");
225 }
226
227 #[test]
228 fn test_oa_hash_list() {
229 let magic_number = KnownMagic::OaHashList;
230 let magic_number_after_prefix = magic_number.to_prefix_bytes();
231
232 assert_eq!(hex::encode(magic_number_after_prefix), "ff9fae3cc645f463");
233 }
234
235 #[test]
236 fn test_oa_structure() {
237 let magic_number = KnownMagic::OaStructure;
238 let magic_number_after_prefix = magic_number.to_prefix_bytes();
239
240 assert_eq!(hex::encode(magic_number_after_prefix), "ffc47a6299e8a911");
241 }
242
243 #[test]
244 fn test_oa_token_image() {
245 let magic_number = KnownMagic::OaTokenImage;
246 let magic_number_after_prefix = magic_number.to_prefix_bytes();
247
248 assert_eq!(hex::encode(magic_number_after_prefix), "ff8cd2927c8c86cb");
249 }
250
251 #[test]
252 fn test_oa_token_credential_links() {
253 let magic_number = KnownMagic::OaTokenCredentialLinks;
254 let magic_number_after_prefix = magic_number.to_prefix_bytes();
255
256 assert_eq!(hex::encode(magic_number_after_prefix), "ffbc38eb14ad2209");
257 }
258
259 #[test]
260 fn test_oa_magics_roundtrip() {
261 for magic_number in [
262 KnownMagic::OaSchema,
263 KnownMagic::OaHashList,
264 KnownMagic::OaStructure,
265 KnownMagic::OaTokenImage,
266 KnownMagic::OaTokenCredentialLinks,
267 ] {
268 let from_u64 = KnownMagic::try_from(magic_number as u64).unwrap();
269 assert_eq!(magic_number, from_u64);
270 }
271 }
272}