diff --git a/crates/ethers-contract/ethers-contract-abigen/src/contract/common.rs b/crates/ethers-contract/ethers-contract-abigen/src/contract/common.rs index 9b1817a0..2b459d53 100644 --- a/crates/ethers-contract/ethers-contract-abigen/src/contract/common.rs +++ b/crates/ethers-contract/ethers-contract-abigen/src/contract/common.rs @@ -8,11 +8,13 @@ pub(crate) fn imports() -> TokenStream { quote! { // TODO: Can we make this context aware so that it imports either ethers_contract // or ethers::contract? - use ethers_contract::{ - abi::{Abi, Token, Detokenize, InvalidOutputType, Tokenizable}, - Contract, ContractCall, Event, Lazy, + use ethers::{ + core::{ + abi::{Abi, Token, Detokenize, InvalidOutputType, Tokenizable}, + types::*, // import all the types so that we can codegen for everything + }, + contract::{Contract, ContractCall, Event, Lazy}, signers::{Client, Signer}, - types::*, // import all the types so that we can codegen for everything providers::{JsonRpcClient, networks::Network}, }; } diff --git a/crates/ethers-contract/ethers-contract-abigen/src/contract/events.rs b/crates/ethers-contract/ethers-contract-abigen/src/contract/events.rs index a9c10b0a..9073ed7a 100644 --- a/crates/ethers-contract/ethers-contract-abigen/src/contract/events.rs +++ b/crates/ethers-contract/ethers-contract-abigen/src/contract/events.rs @@ -44,9 +44,13 @@ impl Context { /// Expands into a single method for contracting an event stream. fn expand_filter(event: &Event) -> Result { - let name = util::safe_ident(&event.name.to_snake_case()); + // append `filter` to disambiguate with potentially conflicting + // function names + let name = util::safe_ident(&format!("{}_filter", event.name.to_snake_case())); + // let result = util::ident(&event.name.to_pascal_case()); + let result = expand_struct_name(event); + let ev_name = Literal::string(&event.name); - let result = util::ident(&event.name.to_pascal_case()); let doc = util::expand_doc(&format!("Gets the contract's `{}` event", event.name)); Ok(quote! { @@ -139,7 +143,8 @@ fn expand_event(event: &Event, event_derives: &[Path]) -> Result { /// Expands an ABI event into an identifier for its event data type. fn expand_struct_name(event: &Event) -> TokenStream { - let event_name = util::ident(&event.name.to_pascal_case()); + let name = format!("{}Filter", event.name.to_pascal_case()); + let event_name = util::ident(&name); quote! { #event_name } } @@ -314,7 +319,7 @@ mod tests { assert_quote!(expand_filter(&event).unwrap(), { #[doc = "Gets the contract's `Transfer` event"] - pub fn transfer<'b>(&'a self) -> Event<'a, 'b, P, N, Transfer> + pub fn transfer_filter<'b>(&'a self) -> Event<'a, 'b, P, N, TransferFilter> where 'a: 'b, { @@ -389,12 +394,12 @@ mod tests { let (definition, construction) = expand_data_struct(&name, ¶ms); assert_quote!(definition, { - struct Foo { + struct FooFilter { pub a: bool, pub p1: Address, } }); - assert_quote!(construction, { Foo { a, p1 } }); + assert_quote!(construction, { FooFilter { a, p1 } }); } #[test] @@ -421,9 +426,9 @@ mod tests { let (definition, construction) = expand_data_tuple(&name, ¶ms); assert_quote!(definition, { - struct Foo(pub bool, pub Address); + struct FooFilter(pub bool, pub Address); }); - assert_quote!(construction, { Foo(p0, p1) }); + assert_quote!(construction, { FooFilter(p0, p1) }); } // #[test] diff --git a/crates/ethers/examples/contract.rs b/crates/ethers/examples/contract.rs index bb9ea960..35d96781 100644 --- a/crates/ethers/examples/contract.rs +++ b/crates/ethers/examples/contract.rs @@ -53,7 +53,7 @@ async fn main() -> Result<()> { let _tx_hash = contract.set_value("hi".to_owned()).send().await?; // 11. get all events - let logs = contract.value_changed().from_block(0u64).query().await?; + let logs = contract.value_changed_filter().from_block(0u64).query().await?; // 12. get the new value let value = contract.get_value().call().await?; diff --git a/crates/ethers/src/lib.rs b/crates/ethers/src/lib.rs index bec5f3d6..89b28663 100644 --- a/crates/ethers/src/lib.rs +++ b/crates/ethers/src/lib.rs @@ -45,7 +45,7 @@ pub mod contract { /// network type and override the provider's ENS address with the `ens` method. /// /// ```rust -/// use ethers_providers::{HttpProvider, networks::Any}; +/// use ethers::providers::{HttpProvider, networks::Any}; /// use std::convert::TryFrom; /// use tokio::runtime::Runtime; /// @@ -68,7 +68,7 @@ pub mod contract { /// follows: /// /// ```rust -/// # use ethers_providers::{HttpProvider, networks::Mainnet}; +/// # use ethers::providers::{HttpProvider, networks::Mainnet}; /// # use std::convert::TryFrom; /// # use tokio::runtime::Runtime; /// # let provider = HttpProvider::::try_from( @@ -147,7 +147,7 @@ pub mod signers { /// signing the hash of the result. /// /// ```rust -/// use ethers_core::types::{PrivateKey, Address}; +/// use ethers::core::types::{PrivateKey, Address}; /// /// let message = "Some data"; /// let key = PrivateKey::new(&mut rand::thread_rng());