/* Generated by ts-generator ver. 0.0.8 */
/* tslint:disable */

import { Contract, ContractTransaction, EventFilter, Signer } from "ethers";
import { Listener, Provider } from "ethers/providers";
import { Arrayish, BigNumber, BigNumberish, Interface } from "ethers/utils";
import {
  TransactionOverrides,
  TypedEventDescription,
  TypedFunctionDescription
} from ".";

interface OneSplitAdapterInterface extends Interface {
  functions: {
    approveExchange: TypedFunctionDescription<{
      encode([_tokens]: [string[]]): string;
    }>;

    exchange: TypedFunctionDescription<{
      encode([_from, _to, _amount, _maxSlippage]: [
        string,
        string,
        BigNumberish,
        BigNumberish
      ]): string;
    }>;
  };

  events: {
    Exchange: TypedEventDescription<{
      encodeTopics([from, to, platform, fromAmount, toAmount]: [
        string | null,
        string | null,
        string | null,
        null,
        null
      ]): string[];
    }>;

    OneSplitAdapterSetup: TypedEventDescription<{
      encodeTopics([oneSplit, priceOracle, splitParts]: [
        null,
        null,
        null
      ]): string[];
    }>;
  };
}

export class OneSplitAdapter extends Contract {
  connect(signerOrProvider: Signer | Provider | string): OneSplitAdapter;
  attach(addressOrName: string): OneSplitAdapter;
  deployed(): Promise<OneSplitAdapter>;

  on(event: EventFilter | string, listener: Listener): OneSplitAdapter;
  once(event: EventFilter | string, listener: Listener): OneSplitAdapter;
  addListener(
    eventName: EventFilter | string,
    listener: Listener
  ): OneSplitAdapter;
  removeAllListeners(eventName: EventFilter | string): OneSplitAdapter;
  removeListener(eventName: any, listener: Listener): OneSplitAdapter;

  interface: OneSplitAdapterInterface;

  functions: {
    approveExchange(
      _tokens: string[],
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    exchange(
      _from: string,
      _to: string,
      _amount: BigNumberish,
      _maxSlippage: BigNumberish,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;
  };

  approveExchange(
    _tokens: string[],
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  exchange(
    _from: string,
    _to: string,
    _amount: BigNumberish,
    _maxSlippage: BigNumberish,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  filters: {
    Exchange(
      from: string | null,
      to: string | null,
      platform: string | null,
      fromAmount: null,
      toAmount: null
    ): EventFilter;

    OneSplitAdapterSetup(
      oneSplit: null,
      priceOracle: null,
      splitParts: null
    ): EventFilter;
  };

  estimate: {
    approveExchange(_tokens: string[]): Promise<BigNumber>;

    exchange(
      _from: string,
      _to: string,
      _amount: BigNumberish,
      _maxSlippage: BigNumberish
    ): Promise<BigNumber>;
  };
}