public static <E, C extends Collection<E>> C readCollection(
    @NotNull IonReader reader,
    @Nullable String fieldName,
    @NotNull Supplier<? extends C> newCollection,
    @NotNull Supplier<? extends @Nullable E> elementReader
  ) {
    reader.next();
    assertFieldName(reader, fieldName);
    reader.stepIn();
    C collection = newCollection.get();
    E element;
    while ((element = elementReader.get()) != null) {
      collection.add(element);
    }
    reader.stepOut();
    return collection;
  }
public static <E, C extends Collection<E>> C readCollection(
    @NotNull IonReader reader,
    @Nullable String fieldName,
    @NotNull Supplier<? extends C> newCollection,
    @NotNull Supplier<? extends @Nullable E> elementReader
  )