use crate::evm;
use crate::evm::EvmDepositError;
use alloy_primitives::{Address, U256};
use alloy_provider::network::AnyNetwork;
use alloy_provider::{DynProvider, PendingTransactionBuilder};
use std::marker::PhantomData;
#[derive(Debug)]
pub(crate) enum DepositContext {
Evm {
provider: DynProvider<AnyNetwork>,
signer_address: Address,
deposit_contract: Address,
token: Address,
amount: U256,
},
}
#[derive(Debug)]
pub struct Deposit<T> {
inner: DepositContext,
_chain_type: PhantomData<T>,
}
impl<T> Deposit<T> {
pub(crate) fn new(inner: DepositContext) -> Self {
Self {
inner,
_chain_type: PhantomData,
}
}
}
impl Deposit<Address> {
pub async fn send(self) -> Result<PendingTransactionBuilder<AnyNetwork>, EvmDepositError> {
let DepositContext::Evm {
provider,
signer_address,
deposit_contract,
token,
amount,
} = self.inner;
evm::deposit(provider, deposit_contract, signer_address, token, amount).await
}
}