package org.onosproject.drivers.barefoot.pro.pal;

/**
 * Autogenerated by Thrift Compiler (0.11.0)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */

public enum pal_fec_type_t implements org.apache.thrift.TEnum {
  BF_FEC_TYP_NONE(0),
  BF_FEC_TYP_FIRECODE(1),
  BF_FEC_TYP_REED_SOLOMON(2);

  private final int value;

  private pal_fec_type_t(int value) {
    this.value = value;
  }

  /**
   * Get the integer value of this enum value, as defined in the Thrift IDL.
   */
  public int getValue() {
    return value;
  }

  /**
   * Find a the enum type by its integer value, as defined in the Thrift IDL.
   * @return null if the value is not found.
   */
  public static pal_fec_type_t findByValue(int value) { 
    switch (value) {
      case 0:
        return BF_FEC_TYP_NONE;
      case 1:
        return BF_FEC_TYP_FIRECODE;
      case 2:
        return BF_FEC_TYP_REED_SOLOMON;
      default:
        return null;
    }
  }
}
