diff --git a/src/encoding/swap_encoder/builder.rs b/src/encoding/swap_encoder/builder.rs
index 9a8768d..ce4acb1 100644
--- a/src/encoding/swap_encoder/builder.rs
+++ b/src/encoding/swap_encoder/builder.rs
@@ -6,33 +6,22 @@ use std::str::FromStr;
pub struct SwapEncoderBuilder {
protocol_system: String,
- executor_address: Option
,
+ executor_address: Address,
}
impl SwapEncoderBuilder {
- pub fn new(protocol_system: &str) -> Self {
+ pub fn new(protocol_system: &str, executor_address: &str) -> Self {
SwapEncoderBuilder {
protocol_system: protocol_system.to_string(),
- executor_address: None,
+ executor_address: Address::from_str(executor_address)
+ .expect(&format!("Invalid address: {}", executor_address)),
}
}
- pub fn executor_address(mut self, address: &str) -> Self {
- self.executor_address =
- Some(Address::from_str(address).expect(&format!("Invalid address: {}", address)));
- self
- }
-
pub fn build(self) -> Result, String> {
- let executor_address = self.executor_address.ok_or_else(|| {
- format!(
- "Executor address must be provided for protocol: {}",
- self.protocol_system
- )
- })?;
match self.protocol_system.as_str() {
- "uniswap_v2" => Ok(Box::new(UniswapV2SwapEncoder::new(executor_address))),
- "vm:balancer_v2" => Ok(Box::new(BalancerV2SwapEncoder::new(executor_address))),
+ "uniswap_v2" => Ok(Box::new(UniswapV2SwapEncoder::new(self.executor_address))),
+ "vm:balancer_v2" => Ok(Box::new(BalancerV2SwapEncoder::new(self.executor_address))),
_ => Err(format!("Unknown protocol system: {}", self.protocol_system)),
}
}
diff --git a/src/encoding/swap_encoder/registry.rs b/src/encoding/swap_encoder/registry.rs
index cd57d0e..8320b64 100644
--- a/src/encoding/swap_encoder/registry.rs
+++ b/src/encoding/swap_encoder/registry.rs
@@ -13,7 +13,7 @@ impl SwapEncoderRegistry {
let mut encoders = HashMap::new();
for (protocol, executor_address) in config.executors {
- let builder = SwapEncoderBuilder::new(&protocol).executor_address(&executor_address);
+ let builder = SwapEncoderBuilder::new(&protocol, &executor_address);
let encoder = builder.build().expect(&format!(
"Failed to build swap encoder for protocol: {}",
protocol
diff --git a/src/encoding/swap_encoder/swap_encoder.rs b/src/encoding/swap_encoder/swap_encoder.rs
index 310a95d..9776f87 100644
--- a/src/encoding/swap_encoder/swap_encoder.rs
+++ b/src/encoding/swap_encoder/swap_encoder.rs
@@ -7,6 +7,7 @@ use anyhow::Error;
use std::str::FromStr;
pub trait SwapEncoder: Sync + Send {
+ fn new(executor_address: Address) -> Self;
fn encode_swap(&self, swap: Swap, encoding_context: EncodingContext) -> Result, Error>;
fn executor_address(&self) -> Address;
}
@@ -15,12 +16,11 @@ pub struct UniswapV2SwapEncoder {
executor_address: Address,
}
-impl UniswapV2SwapEncoder {
- pub fn new(executor_address: Address) -> Self {
+impl UniswapV2SwapEncoder {}
+impl SwapEncoder for UniswapV2SwapEncoder {
+ fn new(executor_address: Address) -> Self {
Self { executor_address }
}
-}
-impl SwapEncoder for UniswapV2SwapEncoder {
fn encode_swap(&self, swap: Swap, encoding_context: EncodingContext) -> Result, Error> {
todo!()
}
@@ -35,17 +35,14 @@ pub struct BalancerV2SwapEncoder {
vault_address: Address,
}
-impl BalancerV2SwapEncoder {
- pub fn new(executor_address: Address) -> Self {
+impl SwapEncoder for BalancerV2SwapEncoder {
+ fn new(executor_address: Address) -> Self {
Self {
executor_address,
vault_address: Address::from_str("0xba12222222228d8ba445958a75a0704d566bf2c8")
.expect("Invalid string for balancer vault address"),
}
}
-}
-
-impl SwapEncoder for BalancerV2SwapEncoder {
fn encode_swap(&self, swap: Swap, encoding_context: EncodingContext) -> Result, Error> {
let token_approvals_manager = ProtocolApprovalsManager::new();
let runtime = tokio::runtime::Handle::try_current()