From 30f2ac9f6b1d71bcadce06ff22722cb231e16799 Mon Sep 17 00:00:00 2001 From: Diana Carvalho Date: Wed, 15 Jan 2025 16:51:28 +0000 Subject: [PATCH] fix: Add new to SwapEncoder trait Add executor_address in SwapEncoderBuilder::new and not in the builder pattern --- src/encoding/swap_encoder/builder.rs | 23 ++++++----------------- src/encoding/swap_encoder/registry.rs | 2 +- src/encoding/swap_encoder/swap_encoder.rs | 15 ++++++--------- 3 files changed, 13 insertions(+), 27 deletions(-) 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()