kabu_types_entities/
swap_encoder.rs1use 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 #[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}