// Code generated by the multiversx-sc proxy generator. DO NOT EDIT.

////////////////////////////////////////////////////
////////////////// AUTO-GENERATED //////////////////
////////////////////////////////////////////////////

#![allow(dead_code)]
#![allow(clippy::all)]

use multiversx_sc::proxy_imports::*;

pub struct MessageMeProxy;

impl<Env, From, To, Gas> TxProxyTrait<Env, From, To, Gas> for MessageMeProxy
where
    Env: TxEnv,
    From: TxFrom<Env>,
    To: TxTo<Env>,
    Gas: TxGas<Env>,
{
    type TxProxyMethods = MessageMeProxyMethods<Env, From, To, Gas>;

    fn proxy_methods(self, tx: Tx<Env, From, To, (), Gas, (), ()>) -> Self::TxProxyMethods {
        MessageMeProxyMethods { wrapped_tx: tx }
    }
}

pub struct MessageMeProxyMethods<Env, From, To, Gas>
where
    Env: TxEnv,
    From: TxFrom<Env>,
    To: TxTo<Env>,
    Gas: TxGas<Env>,
{
    wrapped_tx: Tx<Env, From, To, (), Gas, (), ()>,
}

#[rustfmt::skip]
impl<Env, From, Gas> MessageMeProxyMethods<Env, From, (), Gas>
where
    Env: TxEnv,
    Env::Api: VMApi,
    From: TxFrom<Env>,
    Gas: TxGas<Env>,
{
    pub fn init<
        Arg0: ProxyArg<i32>,
    >(
        self,
        init_arg: Arg0,
    ) -> TxTypedDeploy<Env, From, (), Gas, i32> {
        self.wrapped_tx
            .raw_deploy()
            .argument(&init_arg)
            .original_result()
    }
}

#[rustfmt::skip]
impl<Env, From, To, Gas> MessageMeProxyMethods<Env, From, To, Gas>
where
    Env: TxEnv,
    Env::Api: VMApi,
    From: TxFrom<Env>,
    To: TxTo<Env>,
    Gas: TxGas<Env>,
{
    pub fn upgrade(
        self,
    ) -> TxTypedUpgrade<Env, From, To, (), Gas, ()> {
        self.wrapped_tx
            .raw_upgrade()
            .original_result()
    }
}

#[rustfmt::skip]
impl<Env, From, To, Gas> MessageMeProxyMethods<Env, From, To, Gas>
where
    Env: TxEnv,
    Env::Api: VMApi,
    From: TxFrom<Env>,
    To: TxTo<Env>,
    Gas: TxGas<Env>,
{
    pub fn message_me<
        Arg0: ProxyArg<i64>,
        Arg1: ProxyArg<BigUint<Env::Api>>,
        Arg2: ProxyArg<Vec<u8>>,
        Arg3: ProxyArg<ManagedAddress<Env::Api>>,
    >(
        self,
        arg1: Arg0,
        arg2: Arg1,
        arg3: Arg2,
        arg4: Arg3,
    ) -> TxTypedCall<Env, From, To, (), Gas, ()> {
        self.wrapped_tx
            .raw_call("messageMe")
            .argument(&arg1)
            .argument(&arg2)
            .argument(&arg3)
            .argument(&arg4)
            .original_result()
    }
}
