createOneofLookup<E extends Enum> function

PbiOneofLookup<E> createOneofLookup<E extends Enum>({
  1. required BuilderInfo builderInfo,
  2. required int oneofIndex,
  3. required List<E> options,
})

Implementation

PbiOneofLookup<E> createOneofLookup<E extends Enum>({
  required BuilderInfo builderInfo,
  required int oneofIndex,
  required List<E> options,
}) {
  final entries = listOneofFields(
    builderInfo: builderInfo,
    oneofIndex: oneofIndex,
  ).mapIndexed(
    (index, field) => MapEntry(
      field.tagNumber,
      options[index],
    ),
  );
  final tagToWhich = {
    ...Map.fromEntries(entries),
    0: options.last,
  };

  final whichToTag = tagToWhich.map(
    (key, value) => MapEntry(value, key),
  );

  return PbiOneofLookup(
    tagToWhich: tagToWhich,
    whichToTag: whichToTag,
  );
}