git.delta.rocks / unique-network / refs/commits / 0a8a6b00d989

difftreelog

fix AbiCoder macro

Trubnikov Sergey2022-11-17parent: #7eec33a.patch.diff
in: master

3 files changed

modifiedcrates/evm-coder/procedural/src/abi_derive.rsdiffbeforeafterboth
141 let abi_write = if is_named_fields {141 let abi_write = if is_named_fields {
142 quote!(142 quote!(
143 #(143 #(
144 self.#field_names.abi_write(sub);144 ::evm_coder::abi::AbiWrite::abi_write(&self.#field_names, sub);
145 )*145 )*
146 )146 )
147 } else {147 } else {
150 .map(proc_macro2::Literal::usize_unsuffixed);150 .map(proc_macro2::Literal::usize_unsuffixed);
151 quote!(151 quote!(
152 #(152 #(
153 self.#field_names.abi_write(sub);153 ::evm_coder::abi::AbiWrite::abi_write(&self.#field_names, sub);
154 )*154 )*
155 )155 )
156 };156 };
modifiedcrates/evm-coder/procedural/src/lib.rsdiffbeforeafterboth
251 Ok(e) => e,251 Ok(e) => e,
252 Err(e) => e.to_compile_error(),252 Err(e) => e.to_compile_error(),
253 };253 };
254 // println!("{}", &ts);
255 ts.into()254 ts.into()
256}255}
257256
modifiedcrates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth
1use evm_coder_procedural::AbiCoder;1use evm_coder_procedural::AbiCoder;
2use evm_coder::{2use evm_coder::types::bytes;
3 types::*,
4 abi::{AbiType, AbiRead, AbiWrite, AbiReader, AbiWriter},
5};
63
7// TODO: move to build_failed tests4// TODO: move to build_failed tests
8// #[derive(AbiCoder, PartialEq, Debug)]5// #[derive(AbiCoder, PartialEq, Debug)]
71#[test]68#[test]
72fn impl_abi_type_signature() {69fn impl_abi_type_signature() {
73 assert_eq!(70 assert_eq!(
74 <TypeStruct1SimpleParam as AbiType>::SIGNATURE71 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE
75 .as_str()72 .as_str()
76 .unwrap(),73 .unwrap(),
77 "(uint8)"74 "(uint8)"
78 );75 );
79 assert_eq!(76 assert_eq!(
80 <TypeStruct1DynamicParam as AbiType>::SIGNATURE77 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::SIGNATURE
81 .as_str()78 .as_str()
82 .unwrap(),79 .unwrap(),
83 "(string)"80 "(string)"
84 );81 );
85 assert_eq!(82 assert_eq!(
86 <TypeStruct2SimpleParam as AbiType>::SIGNATURE83 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::SIGNATURE
87 .as_str()84 .as_str()
88 .unwrap(),85 .unwrap(),
89 "(uint8,uint32)"86 "(uint8,uint32)"
90 );87 );
91 assert_eq!(88 assert_eq!(
92 <TypeStruct2DynamicParam as AbiType>::SIGNATURE89 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::SIGNATURE
93 .as_str()90 .as_str()
94 .unwrap(),91 .unwrap(),
95 "(string,bytes)"92 "(string,bytes)"
96 );93 );
97 assert_eq!(94 assert_eq!(
98 <TypeStruct2MixedParam as AbiType>::SIGNATURE95 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::SIGNATURE
99 .as_str()96 .as_str()
100 .unwrap(),97 .unwrap(),
101 "(uint8,bytes)"98 "(uint8,bytes)"
102 );99 );
103 assert_eq!(100 assert_eq!(
104 <TypeStruct1DerivedSimpleParam as AbiType>::SIGNATURE101 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE
105 .as_str()102 .as_str()
106 .unwrap(),103 .unwrap(),
107 "((uint8))"104 "((uint8))"
108 );105 );
109 assert_eq!(106 assert_eq!(
110 <TypeStruct2DerivedSimpleParam as AbiType>::SIGNATURE107 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE
111 .as_str()108 .as_str()
112 .unwrap(),109 .unwrap(),
113 "((uint8),(uint8,uint32))"110 "((uint8),(uint8,uint32))"
114 );111 );
115 assert_eq!(112 assert_eq!(
116 <TypeStruct1DerivedDynamicParam as AbiType>::SIGNATURE113 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE
117 .as_str()114 .as_str()
118 .unwrap(),115 .unwrap(),
119 "((string))"116 "((string))"
120 );117 );
121 assert_eq!(118 assert_eq!(
122 <TypeStruct2DerivedDynamicParam as AbiType>::SIGNATURE119 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE
123 .as_str()120 .as_str()
124 .unwrap(),121 .unwrap(),
125 "((string),(string,bytes))"122 "((string),(string,bytes))"
126 );123 );
127 assert_eq!(124 assert_eq!(
128 <TypeStruct3DerivedMixedParam as AbiType>::SIGNATURE125 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::SIGNATURE
129 .as_str()126 .as_str()
130 .unwrap(),127 .unwrap(),
131 "((uint8),(string,bytes),(uint8,bytes))"128 "((uint8),(string,bytes),(uint8,bytes))"
135#[test]132#[test]
136fn impl_abi_type_is_dynamic() {133fn impl_abi_type_is_dynamic() {
137 assert_eq!(<TypeStruct1SimpleParam as AbiType>::is_dynamic(), false);134 assert_eq!(
135 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
136 false
137 );
138 assert_eq!(<TypeStruct1DynamicParam as AbiType>::is_dynamic(), true);138 assert_eq!(
139 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
140 true
141 );
139 assert_eq!(<TypeStruct2SimpleParam as AbiType>::is_dynamic(), false);142 assert_eq!(
143 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
144 false
145 );
140 assert_eq!(<TypeStruct2DynamicParam as AbiType>::is_dynamic(), true);146 assert_eq!(
147 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
148 true
149 );
141 assert_eq!(<TypeStruct2MixedParam as AbiType>::is_dynamic(), true);150 assert_eq!(
151 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::is_dynamic(),
152 true
153 );
142 assert_eq!(154 assert_eq!(
143 <TypeStruct1DerivedSimpleParam as AbiType>::is_dynamic(),155 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
144 false156 false
145 );157 );
146 assert_eq!(158 assert_eq!(
147 <TypeStruct2DerivedSimpleParam as AbiType>::is_dynamic(),159 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
148 false160 false
149 );161 );
150 assert_eq!(162 assert_eq!(
151 <TypeStruct1DerivedDynamicParam as AbiType>::is_dynamic(),163 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
152 true164 true
153 );165 );
154 assert_eq!(166 assert_eq!(
155 <TypeStruct2DerivedDynamicParam as AbiType>::is_dynamic(),167 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
156 true168 true
157 );169 );
158 assert_eq!(170 assert_eq!(
159 <TypeStruct3DerivedMixedParam as AbiType>::is_dynamic(),171 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::is_dynamic(),
160 true172 true
161 );173 );
162}174}
165fn impl_abi_type_size() {177fn impl_abi_type_size() {
166 const ABI_ALIGNMENT: usize = 32;178 const ABI_ALIGNMENT: usize = 32;
167 assert_eq!(<TypeStruct1SimpleParam as AbiType>::size(), ABI_ALIGNMENT);179 assert_eq!(
180 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::size(),
181 ABI_ALIGNMENT
182 );
168 assert_eq!(<TypeStruct1DynamicParam as AbiType>::size(), ABI_ALIGNMENT);183 assert_eq!(
184 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::size(),
185 ABI_ALIGNMENT
186 );
169 assert_eq!(187 assert_eq!(
170 <TypeStruct2SimpleParam as AbiType>::size(),188 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::size(),
171 ABI_ALIGNMENT * 2189 ABI_ALIGNMENT * 2
172 );190 );
173 assert_eq!(191 assert_eq!(
174 <TypeStruct2DynamicParam as AbiType>::size(),192 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::size(),
175 ABI_ALIGNMENT * 2193 ABI_ALIGNMENT * 2
176 );194 );
177 assert_eq!(195 assert_eq!(
178 <TypeStruct2MixedParam as AbiType>::size(),196 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::size(),
179 ABI_ALIGNMENT * 2197 ABI_ALIGNMENT * 2
180 );198 );
181 assert_eq!(199 assert_eq!(
182 <TypeStruct1DerivedSimpleParam as AbiType>::size(),200 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::size(),
183 ABI_ALIGNMENT201 ABI_ALIGNMENT
184 );202 );
185 assert_eq!(203 assert_eq!(
186 <TypeStruct2DerivedSimpleParam as AbiType>::size(),204 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::size(),
187 ABI_ALIGNMENT * 3205 ABI_ALIGNMENT * 3
188 );206 );
189 assert_eq!(207 assert_eq!(
190 <TypeStruct1DerivedDynamicParam as AbiType>::size(),208 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::size(),
191 ABI_ALIGNMENT209 ABI_ALIGNMENT
192 );210 );
193 assert_eq!(211 assert_eq!(
194 <TypeStruct2DerivedDynamicParam as AbiType>::size(),212 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::size(),
195 ABI_ALIGNMENT * 3213 ABI_ALIGNMENT * 3
196 );214 );
197 assert_eq!(215 assert_eq!(
198 <TypeStruct3DerivedMixedParam as AbiType>::size(),216 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::size(),
199 ABI_ALIGNMENT * 5217 ABI_ALIGNMENT * 5
200 );218 );
201}219}
237#[test]255#[test]
238fn impl_abi_type_signature_same_for_structs() {256fn impl_abi_type_signature_same_for_structs() {
239 assert_eq!(257 assert_eq!(
240 <TypeStruct1SimpleParam as AbiType>::SIGNATURE258 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE
241 .as_str()259 .as_str()
242 .unwrap(),260 .unwrap(),
243 <TupleStruct1SimpleParam as AbiType>::SIGNATURE261 <TupleStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE
244 .as_str()262 .as_str()
245 .unwrap()263 .unwrap()
246 );264 );
247 assert_eq!(265 assert_eq!(
248 <TypeStruct1DynamicParam as AbiType>::SIGNATURE266 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::SIGNATURE
249 .as_str()267 .as_str()
250 .unwrap(),268 .unwrap(),
251 <TupleStruct1DynamicParam as AbiType>::SIGNATURE269 <TupleStruct1DynamicParam as evm_coder::abi::AbiType>::SIGNATURE
252 .as_str()270 .as_str()
253 .unwrap()271 .unwrap()
254 );272 );
255 assert_eq!(273 assert_eq!(
256 <TypeStruct2SimpleParam as AbiType>::SIGNATURE274 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::SIGNATURE
257 .as_str()275 .as_str()
258 .unwrap(),276 .unwrap(),
259 <TupleStruct2SimpleParam as AbiType>::SIGNATURE277 <TupleStruct2SimpleParam as evm_coder::abi::AbiType>::SIGNATURE
260 .as_str()278 .as_str()
261 .unwrap()279 .unwrap()
262 );280 );
263 assert_eq!(281 assert_eq!(
264 <TypeStruct2DynamicParam as AbiType>::SIGNATURE282 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::SIGNATURE
265 .as_str()283 .as_str()
266 .unwrap(),284 .unwrap(),
267 <TupleStruct2DynamicParam as AbiType>::SIGNATURE285 <TupleStruct2DynamicParam as evm_coder::abi::AbiType>::SIGNATURE
268 .as_str()286 .as_str()
269 .unwrap()287 .unwrap()
270 );288 );
271 assert_eq!(289 assert_eq!(
272 <TypeStruct2MixedParam as AbiType>::SIGNATURE290 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::SIGNATURE
273 .as_str()291 .as_str()
274 .unwrap(),292 .unwrap(),
275 <TupleStruct2MixedParam as AbiType>::SIGNATURE293 <TupleStruct2MixedParam as evm_coder::abi::AbiType>::SIGNATURE
276 .as_str()294 .as_str()
277 .unwrap(),295 .unwrap(),
278 );296 );
279 assert_eq!(297 assert_eq!(
280 <TypeStruct1DerivedSimpleParam as AbiType>::SIGNATURE298 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE
281 .as_str()299 .as_str()
282 .unwrap(),300 .unwrap(),
283 <TupleStruct1DerivedSimpleParam as AbiType>::SIGNATURE301 <TupleStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE
284 .as_str()302 .as_str()
285 .unwrap(),303 .unwrap(),
286 );304 );
287 assert_eq!(305 assert_eq!(
288 <TypeStruct2DerivedSimpleParam as AbiType>::SIGNATURE306 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE
289 .as_str()307 .as_str()
290 .unwrap(),308 .unwrap(),
291 <TupleStruct2DerivedSimpleParam as AbiType>::SIGNATURE309 <TupleStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE
292 .as_str()310 .as_str()
293 .unwrap(),311 .unwrap(),
294 );312 );
295 assert_eq!(313 assert_eq!(
296 <TypeStruct1DerivedDynamicParam as AbiType>::SIGNATURE314 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE
297 .as_str()315 .as_str()
298 .unwrap(),316 .unwrap(),
299 <TupleStruct1DerivedDynamicParam as AbiType>::SIGNATURE317 <TupleStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE
300 .as_str()318 .as_str()
301 .unwrap(),319 .unwrap(),
302 );320 );
303 assert_eq!(321 assert_eq!(
304 <TypeStruct2DerivedDynamicParam as AbiType>::SIGNATURE322 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE
305 .as_str()323 .as_str()
306 .unwrap(),324 .unwrap(),
307 <TupleStruct2DerivedDynamicParam as AbiType>::SIGNATURE325 <TupleStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE
308 .as_str()326 .as_str()
309 .unwrap(),327 .unwrap(),
310 );328 );
311 assert_eq!(329 assert_eq!(
312 <TypeStruct3DerivedMixedParam as AbiType>::SIGNATURE330 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::SIGNATURE
313 .as_str()331 .as_str()
314 .unwrap(),332 .unwrap(),
315 <TupleStruct3DerivedMixedParam as AbiType>::SIGNATURE333 <TupleStruct3DerivedMixedParam as evm_coder::abi::AbiType>::SIGNATURE
316 .as_str()334 .as_str()
317 .unwrap(),335 .unwrap(),
318 );336 );
321#[test]339#[test]
322fn impl_abi_type_is_dynamic_same_for_structs() {340fn impl_abi_type_is_dynamic_same_for_structs() {
323 assert_eq!(341 assert_eq!(
324 <TypeStruct1SimpleParam as AbiType>::is_dynamic(),342 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
325 <TupleStruct1SimpleParam as AbiType>::is_dynamic()343 <TupleStruct1SimpleParam as evm_coder::abi::AbiType>::is_dynamic()
326 );344 );
327 assert_eq!(345 assert_eq!(
328 <TypeStruct1DynamicParam as AbiType>::is_dynamic(),346 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
329 <TupleStruct1DynamicParam as AbiType>::is_dynamic()347 <TupleStruct1DynamicParam as evm_coder::abi::AbiType>::is_dynamic()
330 );348 );
331 assert_eq!(349 assert_eq!(
332 <TypeStruct2SimpleParam as AbiType>::is_dynamic(),350 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
333 <TupleStruct2SimpleParam as AbiType>::is_dynamic()351 <TupleStruct2SimpleParam as evm_coder::abi::AbiType>::is_dynamic()
334 );352 );
335 assert_eq!(353 assert_eq!(
336 <TypeStruct2DynamicParam as AbiType>::is_dynamic(),354 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
337 <TupleStruct2DynamicParam as AbiType>::is_dynamic()355 <TupleStruct2DynamicParam as evm_coder::abi::AbiType>::is_dynamic()
338 );356 );
339 assert_eq!(357 assert_eq!(
340 <TypeStruct2MixedParam as AbiType>::is_dynamic(),358 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::is_dynamic(),
341 <TupleStruct2MixedParam as AbiType>::is_dynamic()359 <TupleStruct2MixedParam as evm_coder::abi::AbiType>::is_dynamic()
342 );360 );
343 assert_eq!(361 assert_eq!(
344 <TypeStruct1DerivedSimpleParam as AbiType>::is_dynamic(),362 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
345 <TupleStruct1DerivedSimpleParam as AbiType>::is_dynamic()363 <TupleStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic()
346 );364 );
347 assert_eq!(365 assert_eq!(
348 <TypeStruct2DerivedSimpleParam as AbiType>::is_dynamic(),366 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),
349 <TupleStruct2DerivedSimpleParam as AbiType>::is_dynamic()367 <TupleStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic()
350 );368 );
351 assert_eq!(369 assert_eq!(
352 <TypeStruct1DerivedDynamicParam as AbiType>::is_dynamic(),370 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
353 <TupleStruct1DerivedDynamicParam as AbiType>::is_dynamic()371 <TupleStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic()
354 );372 );
355 assert_eq!(373 assert_eq!(
356 <TypeStruct2DerivedDynamicParam as AbiType>::is_dynamic(),374 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),
357 <TupleStruct2DerivedDynamicParam as AbiType>::is_dynamic()375 <TupleStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic()
358 );376 );
359 assert_eq!(377 assert_eq!(
360 <TypeStruct3DerivedMixedParam as AbiType>::is_dynamic(),378 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::is_dynamic(),
361 <TupleStruct3DerivedMixedParam as AbiType>::is_dynamic()379 <TupleStruct3DerivedMixedParam as evm_coder::abi::AbiType>::is_dynamic()
362 );380 );
363}381}
364382
365#[test]383#[test]
366fn impl_abi_type_size_same_for_structs() {384fn impl_abi_type_size_same_for_structs() {
367 assert_eq!(385 assert_eq!(
368 <TypeStruct1SimpleParam as AbiType>::size(),386 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::size(),
369 <TupleStruct1SimpleParam as AbiType>::size()387 <TupleStruct1SimpleParam as evm_coder::abi::AbiType>::size()
370 );388 );
371 assert_eq!(389 assert_eq!(
372 <TypeStruct1DynamicParam as AbiType>::size(),390 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::size(),
373 <TupleStruct1DynamicParam as AbiType>::size()391 <TupleStruct1DynamicParam as evm_coder::abi::AbiType>::size()
374 );392 );
375 assert_eq!(393 assert_eq!(
376 <TypeStruct2SimpleParam as AbiType>::size(),394 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::size(),
377 <TupleStruct2SimpleParam as AbiType>::size()395 <TupleStruct2SimpleParam as evm_coder::abi::AbiType>::size()
378 );396 );
379 assert_eq!(397 assert_eq!(
380 <TypeStruct2DynamicParam as AbiType>::size(),398 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::size(),
381 <TupleStruct2DynamicParam as AbiType>::size()399 <TupleStruct2DynamicParam as evm_coder::abi::AbiType>::size()
382 );400 );
383 assert_eq!(401 assert_eq!(
384 <TypeStruct2MixedParam as AbiType>::size(),402 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::size(),
385 <TupleStruct2MixedParam as AbiType>::size()403 <TupleStruct2MixedParam as evm_coder::abi::AbiType>::size()
386 );404 );
387 assert_eq!(405 assert_eq!(
388 <TypeStruct1DerivedSimpleParam as AbiType>::size(),406 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::size(),
389 <TupleStruct1DerivedSimpleParam as AbiType>::size()407 <TupleStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::size()
390 );408 );
391 assert_eq!(409 assert_eq!(
392 <TypeStruct2DerivedSimpleParam as AbiType>::size(),410 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::size(),
393 <TupleStruct2DerivedSimpleParam as AbiType>::size()411 <TupleStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::size()
394 );412 );
395 assert_eq!(413 assert_eq!(
396 <TypeStruct1DerivedDynamicParam as AbiType>::size(),414 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::size(),
397 <TupleStruct1DerivedDynamicParam as AbiType>::size()415 <TupleStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::size()
398 );416 );
399 assert_eq!(417 assert_eq!(
400 <TypeStruct2DerivedDynamicParam as AbiType>::size(),418 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::size(),
401 <TupleStruct2DerivedDynamicParam as AbiType>::size()419 <TupleStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::size()
402 );420 );
403 assert_eq!(421 assert_eq!(
404 <TypeStruct3DerivedMixedParam as AbiType>::size(),422 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::size(),
405 <TupleStruct3DerivedMixedParam as AbiType>::size()423 <TupleStruct3DerivedMixedParam as evm_coder::abi::AbiType>::size()
406 );424 );
407}425}
408426
414 type_struct_data: TypeStruct,432 type_struct_data: TypeStruct,
415) where433) where
416 TypeStruct: AbiWrite + AbiRead + std::cmp::PartialEq + std::fmt::Debug,434 TypeStruct:
435 evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,
417 TupleStruct: AbiWrite + AbiRead + std::cmp::PartialEq + std::fmt::Debug,436 TupleStruct:
437 evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,
418 Tuple: AbiWrite + AbiRead + std::cmp::PartialEq + std::fmt::Debug,438 Tuple:
439 evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,
419{440{
420 let encoded_type_struct = test_abi_write_impl(&type_struct_data);441 let encoded_type_struct = test_abi_write_impl(&type_struct_data);
421 let encoded_tuple_struct = test_abi_write_impl(&tuple_struct_data);442 let encoded_tuple_struct = test_abi_write_impl(&tuple_struct_data);
424 similar_asserts::assert_eq!(encoded_tuple, encoded_type_struct);445 similar_asserts::assert_eq!(encoded_tuple, encoded_type_struct);
425 similar_asserts::assert_eq!(encoded_tuple, encoded_tuple_struct);446 similar_asserts::assert_eq!(encoded_tuple, encoded_tuple_struct);
426
427 // dbg!(&encoded_tuple);
428 // dbg!(&encoded_tuple_struct);
429 // dbg!(&encoded_type_struct);
430447
431 {448 {
432 let (_, mut decoder) = AbiReader::new_call(&encoded_tuple).unwrap();449 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_tuple).unwrap();
433 let restored_struct_data = <TypeStruct>::abi_read(&mut decoder).unwrap();450 let restored_struct_data = <TypeStruct>::abi_read(&mut decoder).unwrap();
434 assert_eq!(restored_struct_data, type_struct_data);451 assert_eq!(restored_struct_data, type_struct_data);
435 }452 }
436 {453 {
437 let (_, mut decoder) = AbiReader::new_call(&encoded_tuple).unwrap();454 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_tuple).unwrap();
438 let restored_struct_data = <TupleStruct>::abi_read(&mut decoder).unwrap();455 let restored_struct_data = <TupleStruct>::abi_read(&mut decoder).unwrap();
439 assert_eq!(restored_struct_data, tuple_struct_data);456 assert_eq!(restored_struct_data, tuple_struct_data);
440 }457 }
441458
442 {459 {
443 let (_, mut decoder) = AbiReader::new_call(&encoded_type_struct).unwrap();460 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_type_struct).unwrap();
444 let restored_tuple_data = <Tuple>::abi_read(&mut decoder).unwrap();461 let restored_tuple_data = <Tuple>::abi_read(&mut decoder).unwrap();
445 assert_eq!(restored_tuple_data, tuple_data);462 assert_eq!(restored_tuple_data, tuple_data);
446 }463 }
447 {464 {
448 let (_, mut decoder) = AbiReader::new_call(&encoded_tuple_struct).unwrap();465 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_tuple_struct).unwrap();
449 let restored_tuple_data = <Tuple>::abi_read(&mut decoder).unwrap();466 let restored_tuple_data = <Tuple>::abi_read(&mut decoder).unwrap();
450 assert_eq!(restored_tuple_data, tuple_data);467 assert_eq!(restored_tuple_data, tuple_data);
451 }468 }
452}469}
453470
454fn test_abi_write_impl<A>(data: &A) -> Vec<u8>471fn test_abi_write_impl<A>(data: &A) -> Vec<u8>
455where472where
456 A: AbiWrite + AbiRead + std::cmp::PartialEq + std::fmt::Debug,473 A: evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,
457{474{
458 let mut writer = AbiWriter::new_call(FUNCTION_IDENTIFIER);475 let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER);
459 data.abi_write(&mut writer);476 data.abi_write(&mut writer);
460 let encoded_tuple = writer.finish();477 let encoded_tuple = writer.finish();
461 encoded_tuple478 encoded_tuple
464#[test]481#[test]
465fn codec_struct_1_simple() {482fn codec_struct_1_simple() {
466 let _a = 0xff;483 let _a = 0xff;
467 test_impl::<(uint8,), TupleStruct1SimpleParam, TypeStruct1SimpleParam>(484 test_impl::<(u8,), TupleStruct1SimpleParam, TypeStruct1SimpleParam>(
468 (_a,),485 (_a,),
469 TupleStruct1SimpleParam(_a),486 TupleStruct1SimpleParam(_a),
470 TypeStruct1SimpleParam { _a },487 TypeStruct1SimpleParam { _a },