kabu_types_entities/
swap_encoder.rs

1use crate::tips::Tips;
2use crate::Swap;
3use alloy_primitives::{Address, BlockNumber, Bytes, U256};
4use eyre::Result;
5use std::ops::Deref;
6use std::sync::Arc;
7
8pub trait SwapEncoder {
9    /// Encodes Swap
10    ///
11    /// - next_block_number - number of the next block
12    /// - next_block_gas_price - base_fee + priority fee for transaction
13    /// - sender_address - EOA of of the transaction
14    /// - sender_eth_balance - balance of EOA
15    ///
16    /// returns (to. value, call_data) for transaction
17    #[allow(clippy::too_many_arguments)]
18    fn encode(
19        &self,
20        swap: Swap,
21        tips_pct: Option<u32>,
22        next_block_number: Option<BlockNumber>,
23        gas_cost: Option<U256>,
24        sender_address: Option<Address>,
25        sender_eth_balance: Option<U256>,
26    ) -> Result<(Address, Option<U256>, Bytes, Vec<Tips>)>
27    where
28        Self: Sized;
29
30    fn set_address(&mut self, address: Address);
31
32    fn address(&self) -> Address;
33}
34
35#[derive(Clone)]
36pub struct SwapEncoderWrapper {
37    pub inner: Arc<dyn SwapEncoder>,
38}
39
40impl SwapEncoderWrapper {
41    pub fn new(encoder: Arc<dyn SwapEncoder>) -> Self {
42        SwapEncoderWrapper { inner: encoder }
43    }
44}
45
46impl<T: 'static + SwapEncoder + Clone> From<T> for SwapEncoderWrapper {
47    fn from(pool: T) -> Self {
48        Self { inner: Arc::new(pool) }
49    }
50}
51
52impl Deref for SwapEncoderWrapper {
53    type Target = dyn SwapEncoder;
54    fn deref(&self) -> &Self::Target {
55        self.inner.deref()
56    }
57}