/* tslint:disable */
/* eslint-disable */
/**
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

// May contain unused imports in some cases
// @ts-ignore
import { Fee } from "./fee";
// May contain unused imports in some cases
// @ts-ignore
import { Money } from "./money";
// May contain unused imports in some cases
// @ts-ignore
import { TransferDestinationLocation } from "./transfer-destination-location";
// May contain unused imports in some cases
// @ts-ignore
import { TransferErrorCode } from "./transfer-error-code";
// May contain unused imports in some cases
// @ts-ignore
import { TransferSourceLocation } from "./transfer-source-location";

/**
 * A transfer of funds.
 * @export
 * @interface Transfer
 */
export interface Transfer {
  /**
   * Unique system generated identifier for the entity.
   * @type {string}
   * @memberof Transfer
   */
  id: string;
  /**
   *
   * @type {TransferSourceLocation}
   * @memberof Transfer
   */
  source: TransferSourceLocation;
  /**
   *
   * @type {TransferDestinationLocation}
   * @memberof Transfer
   */
  destination: TransferDestinationLocation;
  /**
   *
   * @type {Money}
   * @memberof Transfer
   */
  amount: Money;
  /**
   * An array of fees applied to a transaction. This is only available when there is at least one non-zero fee.
   * @type {Array<Fee>}
   * @memberof Transfer
   */
  fees?: Array<Fee>;
  /**
   * A hash that uniquely identifies the onchain transaction. This is only available where either source or destination are of type blockchain.
   * @type {string}
   * @memberof Transfer
   */
  transactionHash?: string;
  /**
   * Status of the transfer. Status `pending` indicates that the transfer is in the process of running; `complete` indicates it finished successfully; `failed` indicates it failed. Circle Mint Singapore customers may have transfers in the `pending` status if the recipient addresses are not verified.
   * @type {string}
   * @memberof Transfer
   */
  status: TransferStatusEnum;
  /**
   *
   * @type {TransferErrorCode}
   * @memberof Transfer
   */
  errorCode?: TransferErrorCode | null;
  /**
   * The create date of the transfer.
   * @type {string}
   * @memberof Transfer
   */
  createDate?: string;
}

export const TransferStatusEnum = {
  Pending: "pending",
  Complete: "complete",
  Failed: "failed"
} as const;

export type TransferStatusEnum =
  typeof TransferStatusEnum[keyof typeof TransferStatusEnum];
