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

import { EventLog, PromiEvent, TransactionConfig } from "web3-core";
import { EventOptions } from "web3-eth-contract";
import { EventEmitter } from "events";

export type Callback<T> = (error: Error, result: T) => void;
export interface TransactionObject<T> {
  arguments: any[];
  call(tx?: TransactionConfig): Promise<T>;
  send(tx?: TransactionConfig): PromiEvent<T>;
  estimateGas(tx?: TransactionConfig): Promise<number>;
  encodeABI(): string;
}

export interface ContractEventLog<T> extends EventLog {
  returnValues: T;
}

export interface ContractEventEmitter<T> extends EventEmitter {
  on(
    event: "data" | "changed",
    listener: (event: ContractEventLog<T>) => void
  ): this;
  on(event: "error", listener: (error: Error) => void): this;
}

export type ContractEvent<T> = (
  options?: EventOptions,
  cb?: Callback<ContractEventLog<T>>
) => ContractEventEmitter<T>;
