refactor: change decode_log to take a reference
This commit is contained in:
parent
2513e1f3ff
commit
3e9159d834
|
@ -203,6 +203,8 @@ pub fn derive_abi_event(input: TokenStream) -> TokenStream {
|
|||
signature(hash.as_bytes())
|
||||
};
|
||||
|
||||
let anon = attributes.anonymous.map(|(b,_)|b).unwrap_or_default();
|
||||
|
||||
let ethevent_impl = quote! {
|
||||
impl ethers_contract::EthEvent for #name {
|
||||
|
||||
|
@ -218,10 +220,13 @@ pub fn derive_abi_event(input: TokenStream) -> TokenStream {
|
|||
#abi.into()
|
||||
}
|
||||
|
||||
fn decode_log(log: ethers::abi::RawLog) -> Result<Self, ethers::abi::Error> where Self: Sized {
|
||||
fn decode_log(log: ðers::abi::RawLog) -> Result<Self, ethers::abi::Error> where Self: Sized {
|
||||
#decode_log_impl
|
||||
}
|
||||
|
||||
fn is_anonymous() -> bool {
|
||||
#anon
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -415,10 +420,10 @@ fn derive_decode_from_log_impl(
|
|||
(
|
||||
quote! {},
|
||||
quote! {
|
||||
let flat_topics = topics.into_iter().flat_map(|t| t.as_ref().to_vec()).collect::<Vec<u8>>();
|
||||
let flat_topics = topics.iter().flat_map(|t| t.as_ref().to_vec()).collect::<Vec<u8>>();
|
||||
},
|
||||
quote! {
|
||||
if topic_tokens.len() != topics_len {
|
||||
if topic_tokens.len() != topics.len() {
|
||||
return Err(ethers::abi::Error::InvalidData);
|
||||
}
|
||||
},
|
||||
|
@ -432,10 +437,10 @@ fn derive_decode_from_log_impl(
|
|||
}
|
||||
},
|
||||
quote! {
|
||||
let flat_topics = topics.into_iter().skip(1).flat_map(|t| t.as_ref().to_vec()).collect::<Vec<u8>>();
|
||||
let flat_topics = topics.iter().skip(1).flat_map(|t| t.as_ref().to_vec()).collect::<Vec<u8>>();
|
||||
},
|
||||
quote! {
|
||||
if topic_tokens.is_empty() || topic_tokens.len() != topics_len - 1 {
|
||||
if topic_tokens.is_empty() || topic_tokens.len() != topics.len() - 1 {
|
||||
return Err(ethers::abi::Error::InvalidData);
|
||||
}
|
||||
},
|
||||
|
@ -468,7 +473,7 @@ fn derive_decode_from_log_impl(
|
|||
let mut topic_tokens = ethers::abi::decode(&topic_types, &flat_topics)?;
|
||||
#topic_tokens_len_check
|
||||
let mut data_tokens = ethers::abi::decode(&data_types, &data)?;
|
||||
let mut tokens = Vec::with_capacity(topics_len + data_tokens.len());
|
||||
let mut tokens = Vec::with_capacity(topics.len() + data_tokens.len());
|
||||
#( tokens.push(#swap_tokens); )*
|
||||
}
|
||||
};
|
||||
|
@ -476,7 +481,6 @@ fn derive_decode_from_log_impl(
|
|||
Ok(quote! {
|
||||
|
||||
let ethers::abi::RawLog {data, topics} = log;
|
||||
let topics_len = topics.len();
|
||||
|
||||
#signature_check
|
||||
|
||||
|
|
|
@ -23,9 +23,13 @@ pub trait EthEvent: Detokenize {
|
|||
fn abi_signature() -> Cow<'static, str>;
|
||||
|
||||
/// Decodes an Ethereum `RawLog` into an instance of the type.
|
||||
fn decode_log(log: RawLog) -> Result<Self, ethers_core::abi::Error>
|
||||
fn decode_log(log: &RawLog) -> Result<Self, ethers_core::abi::Error>
|
||||
where
|
||||
Self: Sized;
|
||||
|
||||
/// Returns true if this is an anonymous event
|
||||
fn is_anonymous() -> bool;
|
||||
|
||||
}
|
||||
|
||||
/// Helper for managing the event filter before querying or streaming its logs
|
||||
|
|
Loading…
Reference in New Issue