fix(abigen): add indexed attribute when deriving EthEvent (#255)

* fix(abigen): add indexed attribute when deriving EthEvent

* chore(clippy): make clippy happy
This commit is contained in:
Matthias Seitz 2021-04-02 07:46:39 +02:00 committed by GitHub
parent 5eb31ceae9
commit 32b4e9e3f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 6 deletions

View File

@ -196,7 +196,7 @@ impl Context {
}
/// Expands an ABI event into name-type pairs for each of its parameters.
fn expand_params(&self, event: &Event) -> Result<Vec<(TokenStream, TokenStream)>> {
fn expand_params(&self, event: &Event) -> Result<Vec<(TokenStream, TokenStream, bool)>> {
event
.inputs
.iter()
@ -206,7 +206,7 @@ impl Context {
let name = util::expand_input_name(i, &input.name);
let ty = self.expand_input_type(&input)?;
Ok((name, ty))
Ok((name, ty, input.indexed))
})
.collect()
}
@ -308,10 +308,19 @@ fn expand_struct_name(event: &Event) -> Ident {
/// Expands an event data structure from its name-type parameter pairs. Returns
/// a tuple with the type definition (i.e. the struct declaration) and
/// construction (i.e. code for creating an instance of the event data).
fn expand_data_struct(name: &Ident, params: &[(TokenStream, TokenStream)]) -> TokenStream {
fn expand_data_struct(name: &Ident, params: &[(TokenStream, TokenStream, bool)]) -> TokenStream {
let fields = params
.iter()
.map(|(name, ty)| quote! { pub #name: #ty })
.map(|(name, ty, indexed)| {
if *indexed {
quote! {
#[ethevent(indexed)]
pub #name: #ty
}
} else {
quote! { pub #name: #ty }
}
})
.collect::<Vec<_>>();
quote! { struct #name { #( #fields, )* } }
@ -319,10 +328,10 @@ fn expand_data_struct(name: &Ident, params: &[(TokenStream, TokenStream)]) -> To
/// Expands an event data named tuple from its name-type parameter pairs.
/// Returns a tuple with the type definition and construction.
fn expand_data_tuple(name: &Ident, params: &[(TokenStream, TokenStream)]) -> TokenStream {
fn expand_data_tuple(name: &Ident, params: &[(TokenStream, TokenStream, bool)]) -> TokenStream {
let fields = params
.iter()
.map(|(_, ty)| quote! { pub #ty })
.map(|(_, ty, _)| quote! { pub #ty })
.collect::<Vec<_>>();
quote! { struct #name( #( #fields ),* ); }