From 41998d6d2d549b7592a3bf431545d8277602ae7b Mon Sep 17 00:00:00 2001 From: Georgios Konstantopoulos Date: Fri, 3 Jul 2020 18:51:19 +0300 Subject: [PATCH] fix(tokens): make token decoding abiencoderv2 friendly --- ethers-contract/src/call.rs | 1 - ethers-core/src/abi/tokens.rs | 22 ++++++++-------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/ethers-contract/src/call.rs b/ethers-contract/src/call.rs index e8dc4234..68f2915b 100644 --- a/ethers-contract/src/call.rs +++ b/ethers-contract/src/call.rs @@ -104,7 +104,6 @@ where let bytes = self.client.call(&self.tx, self.block).await?; let tokens = self.function.decode_output(&bytes.0)?; - let data = D::from_tokens(tokens)?; Ok(data) diff --git a/ethers-core/src/abi/tokens.rs b/ethers-core/src/abi/tokens.rs index fbfa3e5a..8a994dea 100644 --- a/ethers-core/src/abi/tokens.rs +++ b/ethers-core/src/abi/tokens.rs @@ -31,20 +31,14 @@ impl Detokenize for () { } impl Detokenize for T { - fn from_tokens(mut tokens: Vec) -> Result { - if tokens.len() != 1 { - Err(InvalidOutputType(format!( - "Expected single element, got a list: {:?}", - tokens - ))) - } else { - Self::from_token( - tokens - .drain(..) - .next() - .expect("At least one element in vector; qed"), - ) - } + fn from_tokens(tokens: Vec) -> Result { + let token = match tokens.len() { + 0 => Token::Tuple(vec![]), + 1 => tokens[0].clone(), + _ => Token::Tuple(tokens), + }; + + Self::from_token(token) } }