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_port_speed_t implements org.apache.thrift.TEnum {
  BF_SPEED_NONE(0),
  BF_SPEED_1G(1),
  BF_SPEED_10G(2),
  BF_SPEED_25G(3),
  BF_SPEED_40G(4),
  BF_SPEED_40G_NB(5),
  BF_SPEED_50G(6),
  BF_SPEED_100G(7),
  BF_SPEED_40G_NON_BREAKABLE(8);

  private final int value;

  private pal_port_speed_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_port_speed_t findByValue(int value) { 
    switch (value) {
      case 0:
        return BF_SPEED_NONE;
      case 1:
        return BF_SPEED_1G;
      case 2:
        return BF_SPEED_10G;
      case 3:
        return BF_SPEED_25G;
      case 4:
        return BF_SPEED_40G;
      case 5:
        return BF_SPEED_40G_NB;
      case 6:
        return BF_SPEED_50G;
      case 7:
        return BF_SPEED_100G;
      case 8:
        return BF_SPEED_40G_NON_BREAKABLE;
      default:
        return null;
    }
  }
}
