Skip to content
This repository has been archived by the owner on Oct 19, 2024. It is now read-only.

Commit

Permalink
docs: add some docs
Browse files Browse the repository at this point in the history
  • Loading branch information
mattsse committed Aug 23, 2021
1 parent 0cad44f commit 91b6fc1
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion ethers-middleware/src/policy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@ use async_trait::async_trait;
use std::fmt::Debug;
use thiserror::Error;

/// Basic trait to ensure that transactions about to be sent follow certain rules.
#[async_trait]
pub trait Policy: Sync + Send + Debug {
type Error: Sync + Send + Debug;

/// Evaluates the transactions.
///
/// Returns Ok with the `tx` or an Err otherwise.
async fn ensure_can_send(&self, tx: TypedTransaction) -> Result<TypedTransaction, Self::Error>;
}

Expand Down Expand Up @@ -38,6 +42,7 @@ impl Policy for RejectAll {
}
}

/// Middleware used to enforce certain policies for transactions.
#[derive(Clone, Debug)]
pub struct PolicyMiddleware<M, P> {
pub(crate) inner: M,
Expand All @@ -50,8 +55,19 @@ impl<M: Middleware, P: Policy> FromErr<M::Error> for PolicyMiddlewareError<M, P>
}
}

impl<M, P> PolicyMiddleware<M, P>
where
M: Middleware,
P: Policy,
{
/// Creates a new client from the provider and policy.
pub fn new(inner: M, policy: P) -> Self {
Self { inner, policy }
}
}

#[derive(Error, Debug)]
/// Error thrown when the client interacts with the blockchain
/// Error thrown when the client interacts with the policy middleware.
pub enum PolicyMiddlewareError<M: Middleware, P: Policy> {
/// Thrown when the internal policy errors
#[error("{0:?}")]
Expand All @@ -75,6 +91,8 @@ where
&self.inner
}

/// This ensures the tx complies with the registered policy.
/// If so then this simply delegates the transaction to the inner middleware
async fn send_transaction<T: Into<TypedTransaction> + Send + Sync>(
&self,
tx: T,
Expand Down

0 comments on commit 91b6fc1

Please sign in to comment.