use multiversx_sc_codec::TopEncodeMulti;
use crate::abi::TypeAbiFrom;
use super::{
DeployCall, FunctionCall, OriginalResultMarker, Tx, TxEnv, TxFrom, TxGas, TxTo, UpgradeCall,
};
pub trait TxProxyTrait<Env, From, To, Gas>
where
Env: TxEnv,
From: TxFrom<Env>,
To: TxTo<Env>,
Gas: TxGas<Env>,
{
type TxProxyMethods;
fn proxy_methods(self, tx: Tx<Env, From, To, (), Gas, (), ()>) -> Self::TxProxyMethods;
}
pub type TxProxyDeploy<Env, From, Gas, Original> =
Tx<Env, From, (), (), Gas, DeployCall<Env, ()>, OriginalResultMarker<Original>>;
pub type TxTypedDeploy<Env, From, Payment, Gas, Original> =
Tx<Env, From, (), Payment, Gas, DeployCall<Env, ()>, OriginalResultMarker<Original>>;
pub type TxProxyCall<Env, From, To, Gas, Original> =
Tx<Env, From, To, (), Gas, FunctionCall<<Env as TxEnv>::Api>, OriginalResultMarker<Original>>;
pub type TxTypedCall<Env, From, To, Payment, Gas, Original> = Tx<
Env,
From,
To,
Payment,
Gas,
FunctionCall<<Env as TxEnv>::Api>,
OriginalResultMarker<Original>,
>;
pub type TxProxyUpgrade<Env, From, To, Gas, Original> =
Tx<Env, From, To, (), Gas, UpgradeCall<Env, ()>, OriginalResultMarker<Original>>;
pub type TxTypedUpgrade<Env, From, To, Payment, Gas, Original> =
Tx<Env, From, To, Payment, Gas, UpgradeCall<Env, ()>, OriginalResultMarker<Original>>;
pub trait ProxyArg<O>: TopEncodeMulti {}
impl<O, T> ProxyArg<O> for T
where
O: TypeAbiFrom<T>,
T: TopEncodeMulti,
{
}