use thruput_json_rpc_types::responses::TransactionReceipt;
use thruput_xdr::contract::ContractEntrypointID;
use thruput_xdr::types::ContractAddress;
use crate::account::Account;
use crate::error::Result;
use crate::network::{Network, SubmittedTransaction};
#[derive(Debug, Clone)]
pub struct Caller {
pub(crate) account: Account,
pub(crate) network: Network,
}
impl Caller {
pub(crate) fn new(account: Account, network: Network) -> Self {
Self { account, network }
}
pub fn address(&self) -> ContractAddress {
self.account.address()
}
pub fn network(&self) -> &Network {
&self.network
}
pub async fn call(
&self,
target: ContractAddress,
entrypoint: ContractEntrypointID,
calldata: &[u8],
) -> Result<TransactionReceipt> {
self.submit_call(target, entrypoint, calldata)
.await?
.await_receipt()
.await
}
pub async fn submit_call(
&self,
target: ContractAddress,
entrypoint: ContractEntrypointID,
calldata: &[u8],
) -> Result<SubmittedTransaction> {
self.account
.submit_call(&self.network, target, entrypoint, calldata)
.await
}
}
impl AsRef<Caller> for Caller {
fn as_ref(&self) -> &Caller {
self
}
}