getEnum<T extends ProtoEnumVariant?> method

T getEnum<T extends ProtoEnumVariant?>(
  1. int fieldNumber,
  2. List<T> values, {
  3. T? defaultValue,
})

Implementation

T getEnum<T extends ProtoEnumVariant?>(
  int fieldNumber,
  List<T> values, {
  T? defaultValue,
}) {
  final defaultValues = values.whereType<ProtoEnumVariant>().toList();
  final current = getTagNumberField(fieldNumber);
  if (current == null) {
    if (defaultValue != null) return defaultValue;
    if (null is T) return null as T;
    if (syntax.isV3) {
      return defaultValues.firstWhere(
            (e) => e.value == 0,
            orElse:
                () =>
                    throw ProtoException(
                      "Missing value for fieldNumber $fieldNumber",
                    ),
          )
          as T;
    }
    throw ProtoException("Missing value for fieldNumber $fieldNumber");
  }
  if (current.config.fieldType != ProtoFieldType.enumType) {
    throw ProtoException("Unsupported field type for conversion as $T.");
  }
  return JsonParser.valueAs(_toEnum(defaultValues, current.value));
}