/*
 * The Plaid API
 * The Plaid REST API. Please see https://plaid.com/docs/api for more details.
 *
 * The version of the OpenAPI document: 2020-09-14_1.680.0
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package com.plaid.client.model;

import java.util.Objects;
import java.util.Arrays;
import io.swagger.annotations.ApiModel;
import com.google.gson.annotations.SerializedName;

import java.io.IOException;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

/**
 * The network or rails used for the transfer.  For transfers submitted as &#x60;ach&#x60; or &#x60;same-day-ach&#x60;, the Standard ACH cutoff is 8:30 PM Eastern Time.  For transfers submitted as &#x60;same-day-ach&#x60;, the Same Day ACH cutoff is 3:30 PM Eastern Time.  It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges; this will apply to both legs of the transfer if applicable. The transaction limit for a Same Day ACH transfer is $1,000,000. Authorization requests sent with an amount greater than $1,000,000 will fail.  For transfers submitted as &#x60;rtp&#x60;,  Plaid will automatically route between Real Time Payment rail by TCH or FedNow rails as necessary. If a transfer is submitted as &#x60;rtp&#x60; and the counterparty account is not eligible for RTP, the &#x60;/transfer/authorization/create&#x60; request will fail with an &#x60;INVALID_FIELD&#x60; error code. To pre-check to determine whether a counterparty account can support RTP, call &#x60;/transfer/capabilities/get&#x60; before calling &#x60;/transfer/authorization/create&#x60;.  Wire transfers are currently in early availability. To request access to &#x60;wire&#x60; as a payment network, contact your Account Manager. For transfers submitted as &#x60;wire&#x60;, the &#x60;type&#x60; must be &#x60;credit&#x60;; wire debits are not supported. The cutoff to submit a wire payment is 6:30 PM Eastern Time on a business day; wires submitted after that time will be processed on the next business day. The transaction limit for a wire is $999,999.99. Authorization requests sent with an amount greater than $999,999.99 will fail.
 */
@JsonAdapter(TransferNetwork.Adapter.class)
public enum TransferNetwork {
  
  ACH("ach"),
  
  SAME_DAY_ACH("same-day-ach"),
  
  RTP("rtp"),
  
  WIRE("wire"),

  // This is returned when an enum is returned from the API that doesn't exist in the OpenAPI file.
  // Try upgrading your client-library version.
  ENUM_UNKNOWN("ENUM_UNKNOWN");

  private String value;

  TransferNetwork(String value) {
    this.value = value;
  }

  public String getValue() {
    return value;
  }

  @Override
  public String toString() {
    return String.valueOf(value);
  }

  public static TransferNetwork fromValue(String value) {
    for (TransferNetwork b : TransferNetwork.values()) {
      if (b.value.equals(value)) {
        return b;
      }
    }
    
    return TransferNetwork.ENUM_UNKNOWN;
  }

  public static class Adapter extends TypeAdapter<TransferNetwork> {
    @Override
    public void write(final JsonWriter jsonWriter, final TransferNetwork enumeration) throws IOException {
      jsonWriter.value(enumeration.getValue());
    }

    @Override
    public TransferNetwork read(final JsonReader jsonReader) throws IOException {
      String value = jsonReader.nextString();
      return TransferNetwork.fromValue(value);
    }
  }
}

