difftreelog
fix AbiCoder macro
in: master
3 files changed
crates/evm-coder/procedural/src/abi_derive.rsdiffbeforeafterboth--- a/crates/evm-coder/procedural/src/abi_derive.rs
+++ b/crates/evm-coder/procedural/src/abi_derive.rs
@@ -141,7 +141,7 @@
let abi_write = if is_named_fields {
quote!(
#(
- self.#field_names.abi_write(sub);
+ ::evm_coder::abi::AbiWrite::abi_write(&self.#field_names, sub);
)*
)
} else {
@@ -150,7 +150,7 @@
.map(proc_macro2::Literal::usize_unsuffixed);
quote!(
#(
- self.#field_names.abi_write(sub);
+ ::evm_coder::abi::AbiWrite::abi_write(&self.#field_names, sub);
)*
)
};
crates/evm-coder/procedural/src/lib.rsdiffbeforeafterboth--- a/crates/evm-coder/procedural/src/lib.rs
+++ b/crates/evm-coder/procedural/src/lib.rs
@@ -251,6 +251,5 @@
Ok(e) => e,
Err(e) => e.to_compile_error(),
};
- // println!("{}", &ts);
ts.into()
}
crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth1use 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};637// TODO: move to build_failed tests4// TODO: move to build_failed tests8// #[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>::SIGNATURE75 .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>::SIGNATURE81 .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>::SIGNATURE87 .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>::SIGNATURE93 .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>::SIGNATURE99 .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>::SIGNATURE105 .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>::SIGNATURE111 .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>::SIGNATURE117 .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>::SIGNATURE123 .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>::SIGNATURE129 .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 false137 );138 assert_eq!(<TypeStruct1DynamicParam as AbiType>::is_dynamic(), true);138 assert_eq!(139 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),140 true141 );139 assert_eq!(<TypeStruct2SimpleParam as AbiType>::is_dynamic(), false);142 assert_eq!(143 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),144 false145 );140 assert_eq!(<TypeStruct2DynamicParam as AbiType>::is_dynamic(), true);146 assert_eq!(147 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),148 true149 );141 assert_eq!(<TypeStruct2MixedParam as AbiType>::is_dynamic(), true);150 assert_eq!(151 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::is_dynamic(),152 true153 );142 assert_eq!(154 assert_eq!(143 <TypeStruct1DerivedSimpleParam as AbiType>::is_dynamic(),155 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),144 false156 false145 );157 );146 assert_eq!(158 assert_eq!(147 <TypeStruct2DerivedSimpleParam as AbiType>::is_dynamic(),159 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),148 false160 false149 );161 );150 assert_eq!(162 assert_eq!(151 <TypeStruct1DerivedDynamicParam as AbiType>::is_dynamic(),163 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),152 true164 true153 );165 );154 assert_eq!(166 assert_eq!(155 <TypeStruct2DerivedDynamicParam as AbiType>::is_dynamic(),167 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),156 true168 true157 );169 );158 assert_eq!(170 assert_eq!(159 <TypeStruct3DerivedMixedParam as AbiType>::is_dynamic(),171 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::is_dynamic(),160 true172 true161 );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_ALIGNMENT182 );168 assert_eq!(<TypeStruct1DynamicParam as AbiType>::size(), ABI_ALIGNMENT);183 assert_eq!(184 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::size(),185 ABI_ALIGNMENT186 );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 * 2172 );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 * 2176 );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 * 2180 );198 );181 assert_eq!(199 assert_eq!(182 <TypeStruct1DerivedSimpleParam as AbiType>::size(),200 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::size(),183 ABI_ALIGNMENT201 ABI_ALIGNMENT184 );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 * 3188 );206 );189 assert_eq!(207 assert_eq!(190 <TypeStruct1DerivedDynamicParam as AbiType>::size(),208 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::size(),191 ABI_ALIGNMENT209 ABI_ALIGNMENT192 );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 * 3196 );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 * 5200 );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>::SIGNATURE241 .as_str()259 .as_str()242 .unwrap(),260 .unwrap(),243 <TupleStruct1SimpleParam as AbiType>::SIGNATURE261 <TupleStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE244 .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>::SIGNATURE249 .as_str()267 .as_str()250 .unwrap(),268 .unwrap(),251 <TupleStruct1DynamicParam as AbiType>::SIGNATURE269 <TupleStruct1DynamicParam as evm_coder::abi::AbiType>::SIGNATURE252 .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>::SIGNATURE257 .as_str()275 .as_str()258 .unwrap(),276 .unwrap(),259 <TupleStruct2SimpleParam as AbiType>::SIGNATURE277 <TupleStruct2SimpleParam as evm_coder::abi::AbiType>::SIGNATURE260 .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>::SIGNATURE265 .as_str()283 .as_str()266 .unwrap(),284 .unwrap(),267 <TupleStruct2DynamicParam as AbiType>::SIGNATURE285 <TupleStruct2DynamicParam as evm_coder::abi::AbiType>::SIGNATURE268 .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>::SIGNATURE273 .as_str()291 .as_str()274 .unwrap(),292 .unwrap(),275 <TupleStruct2MixedParam as AbiType>::SIGNATURE293 <TupleStruct2MixedParam as evm_coder::abi::AbiType>::SIGNATURE276 .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>::SIGNATURE281 .as_str()299 .as_str()282 .unwrap(),300 .unwrap(),283 <TupleStruct1DerivedSimpleParam as AbiType>::SIGNATURE301 <TupleStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE284 .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>::SIGNATURE289 .as_str()307 .as_str()290 .unwrap(),308 .unwrap(),291 <TupleStruct2DerivedSimpleParam as AbiType>::SIGNATURE309 <TupleStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE292 .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>::SIGNATURE297 .as_str()315 .as_str()298 .unwrap(),316 .unwrap(),299 <TupleStruct1DerivedDynamicParam as AbiType>::SIGNATURE317 <TupleStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE300 .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>::SIGNATURE305 .as_str()323 .as_str()306 .unwrap(),324 .unwrap(),307 <TupleStruct2DerivedDynamicParam as AbiType>::SIGNATURE325 <TupleStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE308 .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>::SIGNATURE313 .as_str()331 .as_str()314 .unwrap(),332 .unwrap(),315 <TupleStruct3DerivedMixedParam as AbiType>::SIGNATURE333 <TupleStruct3DerivedMixedParam as evm_coder::abi::AbiType>::SIGNATURE316 .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}364382365#[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}408426414 type_struct_data: TypeStruct,432 type_struct_data: TypeStruct,415) where433) where416 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);426427 // dbg!(&encoded_tuple);428 // dbg!(&encoded_tuple_struct);429 // dbg!(&encoded_type_struct);430447431 {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 }441458442 {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}453470454fn test_abi_write_impl<A>(data: &A) -> Vec<u8>471fn test_abi_write_impl<A>(data: &A) -> Vec<u8>455where472where456 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_tuple464#[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 },