Adds From<H160> trait to ValueOrArray<H160> (#1200)

* Adds From<H160> trait to ValueOrArray<H160>

The trait From<H160> for ValueOrArray<H160> was not implemented which
prevented compilation when using
pub fn address<T: Into<ValueOrArray<Address>>>(self, address: T)
for ethers_core::types::Filter.

Fixes: #1199

* update CHANGELOG.md

* Adds From<Vec<H160>> trait to ValueOrArray<H160> and documentation

The trait From<Vec<H160>> for ValueOrArray<H160> was not implemented which
prevented compilation when passing a Vec<H160> into
pub fn address<T: Into<ValueOrArray<Address>>>(self, address: T)
for ethers_core::types::Filter.

This commit also includes documentation on how to use fn address for
ethers_core::types::Filter.

Fixes: #1199
This commit is contained in:
CyMule 2022-05-02 15:33:33 -04:00 committed by GitHub
parent c44872f62e
commit 4d24acdd84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 3 deletions

View File

@ -62,6 +62,7 @@
[#996](https://github.com/gakonst/ethers-rs/pull/996) [#996](https://github.com/gakonst/ethers-rs/pull/996)
- Add `TransactionReceipt::to` and `TransactionReceipt::from` - Add `TransactionReceipt::to` and `TransactionReceipt::from`
[#1184](https://github.com/gakonst/ethers-rs/pull/1184) [#1184](https://github.com/gakonst/ethers-rs/pull/1184)
- Add `From<H160>` and From<Vec<H160>> traits to `ValueOrArray<H160>` [#1199](https://github.com/gakonst/ethers-rs/pull/1200)
## ethers-contract-abigen ## ethers-contract-abigen

View File

@ -1,6 +1,6 @@
// Adapted from https://github.com/tomusdrw/rust-web3/blob/master/src/types/log.rs // Adapted from https://github.com/tomusdrw/rust-web3/blob/master/src/types/log.rs
use crate::{ use crate::{
types::{Address, BlockNumber, Bytes, H256, U256, U64}, types::{Address, BlockNumber, Bytes, H160, H256, U256, U64},
utils::keccak256, utils::keccak256,
}; };
use serde::{ use serde::{
@ -306,7 +306,31 @@ impl Filter {
self.block_option = self.block_option.set_hash(hash.into()); self.block_option = self.block_option.set_hash(hash.into());
self self
} }
/// Sets the inner filter object
///
/// *NOTE:* ranges are always inclusive
///
/// # Examples
///
/// Match only a specific address `("0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF")`
///
/// ```rust
/// # use ethers_core::types::{Filter, Address};
/// # fn main() {
/// let filter = Filter::new().address("0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF".parse::<Address>().unwrap());
/// # }
/// ```
///
/// Match all addresses in array `(vec!["0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF",
/// "0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8"])`
///
/// ```rust
/// # use ethers_core::types::{Filter, Address, ValueOrArray};
/// # fn main() {
/// let addresses = vec!["0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF".parse::<Address>().unwrap(),"0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8".parse::<Address>().unwrap()];
/// let filter = Filter::new().address(addresses);
/// # }
/// ```
#[must_use] #[must_use]
pub fn address<T: Into<ValueOrArray<Address>>>(mut self, address: T) -> Self { pub fn address<T: Into<ValueOrArray<Address>>>(mut self, address: T) -> Self {
self.address = Some(address.into()); self.address = Some(address.into());
@ -360,6 +384,18 @@ pub enum ValueOrArray<T> {
// TODO: Implement more common types - or adjust this to work with all Tokenizable items // TODO: Implement more common types - or adjust this to work with all Tokenizable items
impl From<H160> for ValueOrArray<H160> {
fn from(src: H160) -> Self {
ValueOrArray::Value(src)
}
}
impl From<Vec<H160>> for ValueOrArray<H160> {
fn from(src: Vec<H160>) -> Self {
ValueOrArray::Array(src)
}
}
impl From<H256> for ValueOrArray<H256> { impl From<H256> for ValueOrArray<H256> {
fn from(src: H256) -> Self { fn from(src: H256) -> Self {
ValueOrArray::Value(src) ValueOrArray::Value(src)