feat: derives &, Arc and Box for Middleware (#109)
* test: can stack Middlewares with Arcs * feat: derive &, Box and Arc impls for Middleware * chore: fix spacing
This commit is contained in:
parent
3a2fd3e814
commit
d9db40402b
|
@ -266,6 +266,18 @@ version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
|
checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "auto_impl"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "42cbf586c80ada5e5ccdecae80d3ef0854f224e2dd74435f8d87e6831b8d0a38"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
|
@ -874,6 +886,7 @@ dependencies = [
|
||||||
"async-tls",
|
"async-tls",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"async-tungstenite",
|
"async-tungstenite",
|
||||||
|
"auto_impl",
|
||||||
"ethers",
|
"ethers",
|
||||||
"ethers-core",
|
"ethers-core",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
|
@ -1884,6 +1897,30 @@ dependencies = [
|
||||||
"uint",
|
"uint",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error-attr",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error-attr"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro-hack"
|
name = "proc-macro-hack"
|
||||||
version = "0.5.19"
|
version = "0.5.19"
|
||||||
|
|
|
@ -387,10 +387,7 @@ mod celo_tests {
|
||||||
let call = contract
|
let call = contract
|
||||||
.method::<_, H256>("setValue", "hi".to_owned())
|
.method::<_, H256>("setValue", "hi".to_owned())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let pending_tx = call
|
let pending_tx = call.send().await.unwrap();
|
||||||
.send()
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
let _receipt = pending_tx.await.unwrap();
|
let _receipt = pending_tx.await.unwrap();
|
||||||
|
|
||||||
let value: String = contract
|
let value: String = contract
|
||||||
|
|
|
@ -57,7 +57,7 @@ mod tests {
|
||||||
let address = signer.address();
|
let address = signer.address();
|
||||||
|
|
||||||
// the base provider
|
// the base provider
|
||||||
let provider = Provider::<Http>::try_from(ganache.endpoint()).unwrap();
|
let provider = Arc::new(Provider::<Http>::try_from(ganache.endpoint()).unwrap());
|
||||||
|
|
||||||
// the Gas Price escalator middleware is the first middleware above the provider,
|
// the Gas Price escalator middleware is the first middleware above the provider,
|
||||||
// so that it receives the transaction last, after all the other middleware
|
// so that it receives the transaction last, after all the other middleware
|
||||||
|
@ -69,7 +69,8 @@ mod tests {
|
||||||
let provider = GasOracleMiddleware::new(provider, gas_oracle);
|
let provider = GasOracleMiddleware::new(provider, gas_oracle);
|
||||||
|
|
||||||
// The signing middleware signs txs
|
// The signing middleware signs txs
|
||||||
let provider = SignerMiddleware::new(provider, signer);
|
use std::sync::Arc;
|
||||||
|
let provider = Arc::new(SignerMiddleware::new(provider, signer));
|
||||||
|
|
||||||
// The nonce manager middleware MUST be above the signing middleware so that it overrides
|
// The nonce manager middleware MUST be above the signing middleware so that it overrides
|
||||||
// the nonce and the signer does not make any eth_getTransaction count calls
|
// the nonce and the signer does not make any eth_getTransaction count calls
|
||||||
|
|
|
@ -41,6 +41,7 @@ async-tls = { version = "0.7.0", optional = true }
|
||||||
|
|
||||||
# needed for parsing while deserialization in gas oracles
|
# needed for parsing while deserialization in gas oracles
|
||||||
serde-aux = "0.6.1"
|
serde-aux = "0.6.1"
|
||||||
|
auto_impl = "0.4.1"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
ethers = { version = "0.1.3", path = "../ethers" }
|
ethers = { version = "0.1.3", path = "../ethers" }
|
||||||
|
|
|
@ -118,6 +118,7 @@ mod pubsub;
|
||||||
pub use pubsub::{PubsubClient, SubscriptionStream};
|
pub use pubsub::{PubsubClient, SubscriptionStream};
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
use auto_impl::auto_impl;
|
||||||
use serde::{de::DeserializeOwned, Serialize};
|
use serde::{de::DeserializeOwned, Serialize};
|
||||||
use std::{error::Error, fmt::Debug, future::Future, pin::Pin};
|
use std::{error::Error, fmt::Debug, future::Future, pin::Pin};
|
||||||
|
|
||||||
|
@ -128,6 +129,7 @@ pub(crate) type PinBoxFut<'a, T> =
|
||||||
Pin<Box<dyn Future<Output = Result<T, ProviderError>> + Send + 'a>>;
|
Pin<Box<dyn Future<Output = Result<T, ProviderError>> + Send + 'a>>;
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
|
#[auto_impl(&, Box, Arc)]
|
||||||
/// Trait which must be implemented by data transports to be used with the Ethereum
|
/// Trait which must be implemented by data transports to be used with the Ethereum
|
||||||
/// JSON-RPC provider.
|
/// JSON-RPC provider.
|
||||||
pub trait JsonRpcClient: Debug + Send + Sync {
|
pub trait JsonRpcClient: Debug + Send + Sync {
|
||||||
|
@ -147,6 +149,7 @@ pub trait FromErr<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
|
#[auto_impl(&, Box, Arc)]
|
||||||
pub trait Middleware: Sync + Send + Debug {
|
pub trait Middleware: Sync + Send + Debug {
|
||||||
type Error: Sync + Send + Error + FromErr<<Self::Inner as Middleware>::Error>;
|
type Error: Sync + Send + Error + FromErr<<Self::Inner as Middleware>::Error>;
|
||||||
type Provider: JsonRpcClient;
|
type Provider: JsonRpcClient;
|
||||||
|
|
Loading…
Reference in New Issue