// 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 Erc1155Proxy;

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

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

pub struct Erc1155ProxyMethods<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> Erc1155ProxyMethods<Env, From, (), Gas>
where
    Env: TxEnv,
    Env::Api: VMApi,
    From: TxFrom<Env>,
    Gas: TxGas<Env>,
{
    pub fn init(
        self,
    ) -> TxTypedDeploy<Env, From, NotPayable, Gas, ()> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_deploy()
            .original_result()
    }
}

#[rustfmt::skip]
impl<Env, From, To, Gas> Erc1155ProxyMethods<Env, From, To, Gas>
where
    Env: TxEnv,
    Env::Api: VMApi,
    From: TxFrom<Env>,
    To: TxTo<Env>,
    Gas: TxGas<Env>,
{
    /// `value` is amount for fungible, nft_id for non-fungible 
    pub fn safe_transfer_from<
        Arg0: ProxyArg<ManagedAddress<Env::Api>>,
        Arg1: ProxyArg<ManagedAddress<Env::Api>>,
        Arg2: ProxyArg<BigUint<Env::Api>>,
        Arg3: ProxyArg<BigUint<Env::Api>>,
        Arg4: ProxyArg<ManagedBuffer<Env::Api>>,
    >(
        self,
        from: Arg0,
        to: Arg1,
        type_id: Arg2,
        value: Arg3,
        data: Arg4,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("safeTransferFrom")
            .argument(&from)
            .argument(&to)
            .argument(&type_id)
            .argument(&value)
            .argument(&data)
            .original_result()
    }

    /// `value` is amount for fungible, nft_id for non-fungible 
    pub fn safe_batch_transfer_from<
        Arg0: ProxyArg<ManagedAddress<Env::Api>>,
        Arg1: ProxyArg<ManagedAddress<Env::Api>>,
        Arg2: ProxyArg<Box<[BigUint<Env::Api>]>>,
        Arg3: ProxyArg<Box<[BigUint<Env::Api>]>>,
        Arg4: ProxyArg<ManagedBuffer<Env::Api>>,
    >(
        self,
        from: Arg0,
        to: Arg1,
        type_ids: Arg2,
        values: Arg3,
        data: Arg4,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("safeBatchTransferFrom")
            .argument(&from)
            .argument(&to)
            .argument(&type_ids)
            .argument(&values)
            .argument(&data)
            .original_result()
    }

    pub fn set_approved_for_all<
        Arg0: ProxyArg<ManagedAddress<Env::Api>>,
        Arg1: ProxyArg<bool>,
    >(
        self,
        operator: Arg0,
        approved: Arg1,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("setApprovalForAll")
            .argument(&operator)
            .argument(&approved)
            .original_result()
    }

    pub fn create_token<
        Arg0: ProxyArg<BoxedBytes>,
        Arg1: ProxyArg<BigUint<Env::Api>>,
        Arg2: ProxyArg<bool>,
    >(
        self,
        uri: Arg0,
        initial_supply: Arg1,
        is_fungible: Arg2,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, BigUint<Env::Api>> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("createToken")
            .argument(&uri)
            .argument(&initial_supply)
            .argument(&is_fungible)
            .original_result()
    }

    pub fn mint<
        Arg0: ProxyArg<BigUint<Env::Api>>,
        Arg1: ProxyArg<BigUint<Env::Api>>,
    >(
        self,
        type_id: Arg0,
        amount: Arg1,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("mint")
            .argument(&type_id)
            .argument(&amount)
            .original_result()
    }

    pub fn burn<
        Arg0: ProxyArg<BigUint<Env::Api>>,
        Arg1: ProxyArg<BigUint<Env::Api>>,
    >(
        self,
        type_id: Arg0,
        amount: Arg1,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("burn")
            .argument(&type_id)
            .argument(&amount)
            .original_result()
    }

    pub fn balance_of<
        Arg0: ProxyArg<ManagedAddress<Env::Api>>,
        Arg1: ProxyArg<BigUint<Env::Api>>,
    >(
        self,
        owner: Arg0,
        type_id: Arg1,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, BigUint<Env::Api>> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("balanceOf")
            .argument(&owner)
            .argument(&type_id)
            .original_result()
    }

    pub fn balance_of_batch<
        Arg0: ProxyArg<MultiValueEncoded<Env::Api, MultiValue2<ManagedAddress<Env::Api>, BigUint<Env::Api>>>>,
    >(
        self,
        owner_type_id_pairs: Arg0,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, MultiValueEncoded<Env::Api, BigUint<Env::Api>>> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("balanceOfBatch")
            .argument(&owner_type_id_pairs)
            .original_result()
    }

    pub fn token_owner<
        Arg0: ProxyArg<BigUint<Env::Api>>,
        Arg1: ProxyArg<BigUint<Env::Api>>,
    >(
        self,
        type_id: Arg0,
        nft_id: Arg1,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ManagedAddress<Env::Api>> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("getTokenOwner")
            .argument(&type_id)
            .argument(&nft_id)
            .original_result()
    }

    pub fn token_type_creator<
        Arg0: ProxyArg<BigUint<Env::Api>>,
    >(
        self,
        type_id: Arg0,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, ManagedAddress<Env::Api>> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("getTokenTypeCreator")
            .argument(&type_id)
            .original_result()
    }

    pub fn token_type_uri<
        Arg0: ProxyArg<BigUint<Env::Api>>,
    >(
        self,
        type_id: Arg0,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, BoxedBytes> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("getTokenTypeUri")
            .argument(&type_id)
            .original_result()
    }

    pub fn is_fungible<
        Arg0: ProxyArg<BigUint<Env::Api>>,
    >(
        self,
        type_id: Arg0,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, bool> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("isFungible")
            .argument(&type_id)
            .original_result()
    }

    pub fn is_approved<
        Arg0: ProxyArg<ManagedAddress<Env::Api>>,
        Arg1: ProxyArg<ManagedAddress<Env::Api>>,
    >(
        self,
        operator: Arg0,
        owner: Arg1,
    ) -> TxTypedCall<Env, From, To, NotPayable, Gas, bool> {
        self.wrapped_tx
            .payment(NotPayable)
            .raw_call("isApprovedForAll")
            .argument(&operator)
            .argument(&owner)
            .original_result()
    }
}
