code: def ParseEnum(field, value):
    
    enum_descriptor = field.enum_type
    try:
      number = int(value, 0)
    except ValueError:
      # Identifier.
      enum_value = enum_descriptor.values_by_name.get(value, None)
      if enum_value is None:
        raise ValueError('Enum type "%s" has no value named %s.' %
                         (enum_descriptor.full_name, value))
    else:
      # Numeric value.
      enum_value = enum_descriptor.values_by_number.get(number, None)
      if enum_value is None:
        raise ValueError('Enum type "%s" has no value with number %d.' %
                         (enum_descriptor.full_name, number))
    return enum_value.number
docs: Parse an enum value.
  
    The value can be specified by a number (the enum value), or by
    a string literal (the enum name).
  
    Args:
      field: Enum field descriptor.
      value: String value.
  
    Returns:
      Enum value number.
  
    Raises:
      ValueError: If the enum value could not be parsed.